What I have done in the past, if the object is serializable and your sql server is 2005 or greater is use the xml Serializable and then save the object in an xml field. If you want to break the object down into indivual records then you can still pass in the xml and use xml to query
For example
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)
The function nodes and value are case sensitive
To turn an object in to xml
XmlSerializer x = new XmlSerializer(classObject.GetType());
MemoryStream stream = new MemoryStream();
x.Serialize(stream, classObject);
return Encoding.ASCII.GetString(stream.ToArray());
All List will actually be translated as <ArrayOf{ClassName}> all your other variables will be the Property Name