我发现DataTable.WriteXml()做而不是,将列的类型写入生成的XML代码中!那么我如何区分32位整数和64位整数呢?
这是我的代码:
Int32 i32 = 12345678;
Int64 i64 = 12345678901234567;
DataTable p = new DataTable();
p.TableName = "Parameters";
p.Columns.Add("ColInt", i32.GetType());
p.Columns.Add("ColLong", i64.GetType());
DataRow r = p.NewRow();
r["ColInt"] = i32;
r["ColLong"] = i64;
p.Rows.Add(r);
StringWriter sw = new StringWriter();
p.WriteXml(sw);
string x = sw.ToString();这是XML输出。您可以清楚地看到,这两列(ColInt、ColLong)的类型没有写入XML代码!
<DocumentElement>
<Parameters>
<ColInt>12345678</ColInt>
<ColLong>12345678901234567</ColLong>
</Parameters>
</DocumentElement>有解决办法吗?
发布于 2020-02-22 14:25:27
您可以使用XmlWriteMode.WriteSchema作为WriteXml方法的参数。
StringWriter sw = new StringWriter();
p.WriteXml(sw, XmlWriteMode.WriteSchema);
string x = sw.ToString();它给出了以下xml数据及其模式。
<NewDataSet>
<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="Parameters" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Parameters">
<xs:complexType>
<xs:sequence>
<xs:element name="ColInt" type="xs:int" minOccurs="0" />
<xs:element name="ColLong" type="xs:long" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Parameters>
<ColInt>12345678</ColInt>
<ColLong>12345678901234567</ColLong>
</Parameters>
</NewDataSet>https://stackoverflow.com/questions/60352968
复制相似问题