我正在WCF中创建一个返回JSON的Web服务,但DataContractJsonSerializer正在讨论一些循环引用(在这种特殊情况下我无法删除)。
相反,我想使用Newtonsoft json库。在WCF中创建自定义序列化程序的最简单方法是什么?
注意:我知道我可以返回一个流,但我不希望操作代码知道序列化的东西。
答案 0 :(得分:4)
重新纯 WCF:如果您控制线路的两端(在“完整”.NET上),那么应用自定义序列化器相对简单 - 您添加从{{1}继承的行为},并覆盖DataContractSerializerOperationBehavior
- 请参阅here(带有属性here)。
然而!我的理解(未经测试)是启用JSON的WCF服务不会使用此路由,但会直接应用自己的序列化程序。
答案 1 :(得分:2)
将DataContract的IsReference属性设置为true,它可用于.NET 3.5SP1
[DataContract(IsReference = true)]
public class Employee
有关详细信息,请参阅。 MSDN DataContractAttribute.IsReference
答案 2 :(得分:1)
非常好的文章:XmlSerializer vs DataContractSerializer: Serialization in Wcf。 Dan Rigsby正在展示不同的场景以及如何更详细地制作自己的序列化器。
答案 3 :(得分:0)
你可以使用这里提到的ScriptIgnore属性: - Ignoring a field during .NET JSON serialization; similar to [XmlIgnore]? 虽然我期待实现你想要的东西,但是不想装饰很多嵌套对象