2

是否有任何DataContractSerializer 可以处理而DataContractJsonSerializer 不能处理的序列化/反序列化场景?

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

还会DataContractJsonSerializer尊重IsReference财产吗?

4

1 回答 1

7

没有什么比下午进行一次好的旧动手测试更好的了...

申请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序列化相同的对象,序列化(和反序列化)就像一个魅力。

现在DataContractJsonSerializer,如果有人知道与相比的更多限制DataContractSerializer,我全神贯注......

于 2013-11-14T13:35:27.940 回答