C# 将数据表行集合反序列化到列表中<;T>;

C# 将数据表行集合反序列化到列表中<;T>;,c#,linq,c#-3.0,xml-serialization,linq-to-xml,C#,Linq,C# 3.0,Xml Serialization,Linq To Xml,我有一个包含数据行的数据表。我有一个属性与行列名匹配的类 如何从DataTable行信息填充列表 我是否调用(MyType)newxmlserializer(typeof(MyType)).Deserialize(newxmlreader(Table.WriteXML()) 如果我正确理解了您的问题,您想将每行数据的字段放入类的实例中,然后将实例存储在列表中吗 在这种情况下,最直接的方法是 create the List object loop over the rows create a

我有一个包含数据行的数据表。我有一个属性与行列名匹配的类

如何从DataTable行信息填充列表


我是否调用(MyType)newxmlserializer(typeof(MyType)).Deserialize(newxmlreader(Table.WriteXML())

如果我正确理解了您的问题,您想将每行数据的字段放入类的实例中,然后将实例存储在列表中吗

在这种情况下,最直接的方法是

create the List object
loop over the rows
   create a new YourClass object
   map the fields to the properties of the YourClass object
   add the YourClass object to the list

我建议编写类来执行此转换,而不是使用XML序列化,这需要大量额外的工作,并且将对象与数据模型联系得太紧密

另一方面,有时您只需要从XML反序列化集合。要实现这一点,只需告诉
XmlSerializer
要映射到集合的节点

默认情况下,
DataTable.WriteXml
创建一个名为
的根元素。例如,如果您从一个名为“Name”的
数据表编写,该表有“FirstName”和“LastName”列,您将得到以下结果:

<DocumentElement>
    <Name>
        <FirstName>Jon</FirstName>
        <LastName>User</LastName>
    </Name>
</DocumentElement>
。。。。根据需要反序列化为
列表

手工 作为替代方案,您可以这样做:

XmlRootAttribute root       = new XmlRootAttribute("DocumentElement");
XmlSerializer    serializer = new XmlSerializer(typeof(List<Name>), root);
XmlRootAttribute root=新的XmlRootAttribute(“DocumentElement”);
XmlSerializer serializer=新的XmlSerializer(typeof(List),root);
假定其他一切正常(即,数据行列名与类的属性名匹配),这将按预期反序列化到
列表中


编辑:请注意,这种方法有一个相当严重的问题(有一个相当麻烦的解决方法),在这个SO问题中有描述:。

我只是认为XMLSerializer类可能有一种更快的方法,但不确定是否有“更快”,你是说“通用”吗?我猜?以前我有XML并使用XMLSerializer,但那时我只有一个实例。在这种方法中,我现在有X行,因此需要一个列表。感谢您的帮助。我最后使用了下面的例子,因为正如你所说,我正在创造更多的工作,但是你回答了我的问题!谢天谢地没有问题——我刚刚发现了我建议的方法中的一个丑陋的问题(尽管它有一个解决方法),我已经在上面链接了。最好选择非面向XML的实现。:)
XmlRootAttribute root       = new XmlRootAttribute("DocumentElement");
XmlSerializer    serializer = new XmlSerializer(typeof(List<Name>), root);