DataTable或DataSet的XML反序列化

时间:2013-06-28 08:23:33

标签: c# wpf xml serialization datatable

我有以下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'>没想到。”

如何反序列化该内容?

2 个答案:

答案 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,只是通过反序列化您的读者。您可以直接将文件/内存流直接传递给它。