C# - 如何正确序列化和派生DataSet?

时间:2016-11-10 10:36:58

标签: c# serialization datatable dataset xml-serialization

如果序列化数据集有日期,我无法正确反序列化。结果是日期被视为一个单独的表而不是列本身。它似乎没有正确解析。我该如何解决这个问题?

以下是序列化和反序列化后检查的变量。您可以看到deserializedDataSet.Tables有2个计数,其原始值只有1个计数。我打印了表名,并显示第二个表是日期。此外,我可以访问原始数据集中的日期列,但无法访问反序列化版本。

enter image description here

以下是数据集的序列化数据。

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <producttransactionsummary>
    <id>74517</id>
    <branchid>9999</branchid>
    <date xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Year>2016</Year>
      <Month>11</Month>
      <Day>10</Day>
      <Hour>18</Hour>
      <Minute>25</Minute>
      <Second>40</Second>
      <Millisecond>0</Millisecond>
    </date>
  </producttransactionsummary>
  <producttransactionsummary>
    <id>74518</id>
    <branchid>9999</branchid>
    <date xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Year>2016</Year>
      <Month>11</Month>
      <Day>10</Day>
      <Hour>18</Hour>
      <Minute>25</Minute>
      <Second>40</Second>
      <Millisecond>0</Millisecond>
</NewDataSet>

这是反序列化的数据集。

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <producttransactionsummary>
    <id>74517</id>
    <branchid>9999</branchid>
    <date>
      <Year>2016</Year>
      <Month>11</Month>
      <Day>10</Day>
      <Hour>18</Hour>
      <Minute>25</Minute>
      <Second>40</Second>
      <Millisecond>0</Millisecond>
    </date>
  </producttransactionsummary>
  <producttransactionsummary>
    <id>74518</id>
    <branchid>9999</branchid>
    <date>
      <Year>2016</Year>
      <Month>11</Month>
      <Day>10</Day>
      <Hour>18</Hour>
      <Minute>25</Minute>
      <Second>40</Second>
      <Millisecond>0</Millisecond>
    </date>
  </producttransactionsummary>
</NewDataSet>

这是我目前的代码:

public static class Transport
{
    public static MemoryStream Serialize(DataSet dataSet)
    {
        var memoryStream = new MemoryStream();
        dataSet.WriteXml(memoryStream, XmlWriteMode.IgnoreSchema);
        dataSet.WriteXml("input.xml");
        memoryStream.Flush();
        memoryStream.Position = 0;
        return memoryStream;
    }

    public static DataSet Deserialize(MemoryStream stream)
    {
        var dataSet = new DataSet();
        dataSet.ReadXml(stream);
        dataSet.WriteXml("output.xml");
        return dataSet;
    }
}

0 个答案:

没有答案