gpt4 book ai didi

.net - 无法序列化作为 DataSet 一部分的 DataTable

转载 作者:行者123 更新时间:2023-12-01 06:35:09 26 4
gpt4 key购买 nike

我有一个包含一些数据表的数据集。我可以成功地对 DataSet 进行二进制序列化。

如果我尝试单独序列化其中一个数据表,则会得到 NullReferenceException。

如果我制作 DataTable 的副本,则该副本可以很好地序列化。

有谁知道我做错了什么?

此代码重现了该问题:

internal class Program
{
private static void Main(string[] args)
{
System.String xml =
"<CR><AN>543</AN><Br>XYZ</Br><Id>888</Id><M>123456</M><EVT>DATA</EVT><data><telephony><S>2012-01-11T14:01:54.9571247Z</S><CID>100000</CID><reason>test</reason></telephony></data></CR>";

var ds = new System.Data.DataSet();
using (var stringReader = new System.IO.StringReader(xml))
{
ds.ReadXml(stringReader);
}

//This works.
var serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
using (var memStream = new System.IO.MemoryStream())
{
serializer.Serialize(memStream, ds);
}

System.Data.DataTable dt0 = ds.Tables[0];

//Serializing a copy works
System.Data.DataTable copy = dt0.Copy();
using (var memStream = new System.IO.MemoryStream())
{
serializer.Serialize(memStream, copy);
}

//Serializing the original fails with a NULL Reference Exception
using (var memStream = new System.IO.MemoryStream())
{
serializer.Serialize(memStream, dt0);
}
}
}

最佳答案

海事组织这是一个错误。我将序列化数据集称为案例 A,将数据表称为案例 B 并复制数据表案例 C

您的反序列化数据集有两个表 CRdata与他们之间的关系。在情况 B 中,内部人员会丢失一些关于 data 的信息表(更准确地说是集合 rowsOrder)。

失败的顺序:

  • 内部类NewDiffgramGen保持以下行顺序:
  • 数据集中的所有表(案例 A)
  • 一张提供的 table (案例 B)
  • 一张提供的 table (案例 C)
  • 内部类XmlDataTreeWriter通过子关系递归地序列化 DataRows,这些在处理 C
  • 的情况下被清除
  • 如果 B XmlDataTreeWriter失败 this.rowsOrder[row].ToString()并抛出 NullReferenceException

  • 所以你有三个选择:
  • 序列化整个数据集
  • 清除 dt0.ChildRelations
  • 序列化副本
  • 关于.net - 无法序列化作为 DataSet 一部分的 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15640204/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com