То, что я делал в прошлом, если объект сериализуемый, а ваш sql-сервер 2005 или более поздней версии, это использовать xml Serializable, а затем сохранить объект в поле xml.Если вы хотите разбить объект на отдельные записи, вы все равно можете передать xml и использовать xml для запроса
Например
DECLARE @X XML
SET @X ='<ListOfEmployees>
<Employee ID="5">
<Name>Mike</Name>
<Salary>67000</Salary>
</Employee>
<Employee ID="6">
<Name>Bob</Name>
<Salary>40000</Salary>
</Employee>
</ListOfEmployees>'
SELECT
T.c.value('Name[1]', 'varchar(50)'), -- The [1] tells Sql get the first Node Name under the ListOfEmployees/Employee mandatory
T.c.value('Salary[1]','money'),
T.c.value('@ID','int')
FROM @X.nodes('ListOfEmployees/Employee') T(c)
Узлы и значения функции чувствительны к регистру
Чтобы превратить объект в XML
XmlSerializer x = new XmlSerializer(classObject.GetType());
MemoryStream stream = new MemoryStream();
x.Serialize(stream, classObject);
return Encoding.ASCII.GetString(stream.ToArray());
Весь список будет фактически переведен каквсе остальные ваши переменные будут именами свойств