【问题标题】:Can DataContractJsonSerializer handle cyclic references?DataContractJsonSerializer 可以处理循环引用吗?
【发布时间】:2013-11-14 10:45:28
【问题描述】:

有没有DataContractSerializer可以处理而DataContractJsonSerializer不能处理的序列化/反序列化场景?

特别是,我正在考虑循环引用:this MSDN page 解释了 DataContractSerializer 如何通过在 DataContractAttribute 构造函数中使用 IsReference = true 来管理循环引用。另一方面,DataContractAttribute.IsReference 文档并未明确声明其适用性仅限于DataContractSerializer

DataContractJsonSerializer 是否也支持 IsReference 属性?

【问题讨论】:

    标签: c# .net json datacontractserializer datacontractjsonserializer


    【解决方案1】:

    没有什么能比得上下午的老手测试了...

    在要序列化的类上应用DataContractAttribute.IsReference = true时,

    [DataContract(IsReference = true)]
    public class SerializableClass {
    ...
    }
    

    并尝试使用DataContractJsonSerializer对其进行序列化,

    var serializer = new DataContractJsonSerializer(typeof(SerializableClass));
    serializer.WriteObject(stream, obj);
    

    WriteObject 方法会抛出异常:

    System.Runtime.Serialization.SerializationException:“SerializableClass”类型无法序列化为 JSON,因为其 IsReference 设置为“True”。 JSON 格式不支持引用,因为没有用于表示引用的标准化格式。要启用序列化,请禁用该类型或该类型的适当父类的 IsReference 设置。

    另一方面,如果我使用DataContractSerializer 序列化同一个对象,序列化(和反序列化)就像一个魅力。

    现在,如果有人知道DataContractJsonSerializerDataContractSerializer 相比有更多的限制,我会全力以赴……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 2011-04-12
      • 2011-12-12
      • 1970-01-01
      • 2022-11-22
      • 2014-04-13
      相关资源
      最近更新 更多