J'ai trouvé que DataTable.WriteXml()n'écrit pas le type de colonnes dans le code XML généré ! Alors, comment puis-je faire la distinction entre les entiers 32 et 64 bits ?

Voici mon code:

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();

Et c'est la sortie XML. On voit bien que le type des deux colonnes (ColInt, ColLong) n'est pas écrit dans le code XML !

<DocumentElement>
  <Parameters>
    <ColInt>12345678</ColInt>
    <ColLong>12345678901234567</ColLong>
  </Parameters>
</DocumentElement>

Y a-t-il une solution à cela?

1
askolotl 22 févr. 2020 à 17:08

1 réponse

Meilleure réponse

Vous pouvez utiliser XmlWriteMode.WriteSchema comme paramètre pour la méthode WriteXml.

 StringWriter sw = new StringWriter();
            p.WriteXml(sw, XmlWriteMode.WriteSchema);
            string x = sw.ToString();

Il donne les données xml ci-dessous avec son schéma.

<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>
3
Sats 22 févr. 2020 à 14:25