我有以下XML:
<NewDataSet>
<xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Data" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Data">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
</NewDataSet>
我知道这是通过使用new XmlSerializer(typeof(DataTable)).Serialize(writer, (DataTable)myDataTable);
序列化DataTable来创建的。
架构以及实际数据可能不同。
我需要对其进行反序列化,并尝试以下方法:
reader.ReadStartElement("NewDataSet");
var dataSet = (DataTable)new XmlSerializer(typeof(DataTable)).Deserialize(reader);
reader.ReadEndElement();
还有:
reader.ReadStartElement("NewDataSet");
var dataSet = (DataSet)new XmlSerializer(typeof(DataSet)).Deserialize(reader);
reader.ReadEndElement();
我得到的只是
System.InvalidOperationException未处理 消息= XML文档中存在错误(26,14)。 源=的System.Xml
的InnerException:
“http://www.w3.org/2001/XMLSchema'>没想到。”
如何反序列化该内容?
答案 0 :(得分:6)
管理解决它。好像我们使用DataSet
方法直接读取现有ReadXml()
时,它就可以了。
var dataSet = new DataSet();
dataSet.ReadXml(reader);
现在我可以dataSet.Tables[0]
答案 1 :(得分:0)
我无法真正为您提供示例代码,因为我没有其他代码的上下文。
请查看XmlSerializer.Deserialize的文档:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.deserialize.aspx并注意不同的方法。
您的读者应该在流的开头,而不是在您打电话之后
reader.ReadStartElement("NewDataSet");
只是不要开始阅读XML,只是通过反序列化您的读者。您可以直接将文件/内存流直接传递给它。