WebService和SoapFormatter中的DataTable对象上的序列化和反序列化。
我正在尝试反序列化已经通过WebService(Soap)服务进行序列化的DataTable;但是将结果放入SoapFormatter时,它指的是尚未声明名称空间前缀(xs)。任何想法如何声明此名称空间?我已经搜索了SoapFormatter类,找不到任何可插入这些前缀的内容。 另外,看起来您需要导入包含对象的程序集,而我还没有弄清楚该怎么做。
string data = @"
<DataTable xmlns=\"http://www.ici.curitiba.org/\">
<xs:schema id=\"NewDataSet\" xmlns=\"\" 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=\"Table\" msdata:UseCurrentLocale=\"true\">
<xs:complexType>
<xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">
<xs:element name=\"Table\">
<xs:complexType>
<xs:sequence>
<xs:element name=\"id\" type=\"xs:int\" minOccurs=\"0\" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\">
<NewDataSet xmlns=\"\">
<Table diffgr:id=\"Table1\" msdata:rowOrder=\"0\">
<id>6413777</id>
</Table>
</NewDataSet>
</diffgr:diffgram>
</DataTable>
";
var sf = new SoapFormatter();
var ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
ms.Position = 0;
var obj = sf.Deserialize(ms) as DataTable;