使用ReferenceLoopHandling.Ignore序列化依赖于循环的ISerializable对象时,抛出StackOverflowException。

使用ReferenceLoopHandling.Ignore序列化依赖于循环的ISerializable对象时,抛出StackOverflowException。,第1张

使用ReferenceLoopHandling.Ignore序列化依赖于循环的ISerializable对象时,抛出StackOverflowException。

我想你会需要同时

ReferenceLoopHandling.Serialize
PreserveReferencesHandling.All
复制二进制序列化的行为。但是,生成的JSON可能不那么漂亮。

编辑: 我对JSON.Net4.5r10进行了更深入的研究,发现了一个缺陷:

JsonSerializerInternalWriter
不检查
#ShouldWriteReference
通过获得的引用
ISerializable

随着

foreach
循环中
#SerializeISerializable
,如下改写,你的对象图顺利往返。

  foreach (SerializationEntry serializationEntry in serializationInfo)  {    writer.WritePropertyName(serializationEntry.Name);    var entryValue = serializationEntry.Value;    var valueContract = GetContractSafe(entryValue);    if (ShouldWriteReference(entryValue, null, valueContract, null, member))    {      WriteReference(writer, entryValue);    }    else    {      Serializevalue(writer, entryValue, valueContract, null, null, member);    }  }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5477699.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存