DataTable.Write Xml не записывает тип столбцов - PullRequest
1 голос
/ 22 февраля 2020

Я обнаружил, что DataTable.WriteXml() действительно не записывает тип столбцов в сгенерированный код XML! Итак, как я могу различить guish между 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>

Есть ли решение для этого?

1 Ответ

3 голосов
/ 22 февраля 2020

Вы можете использовать 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...