【问题标题】:WCF custom serializerWCF 自定义序列化程序
【发布时间】:2010-11-01 08:06:15
【问题描述】:

我正在 WCF 中创建一个返回 JSON 的 Web 服务,但 DataContractJsonSerializer 在某些循环引用上犹豫不决(在这种特殊情况下我无法删除)。

相反,我想使用 Newtonsoft json 库。在 WCF 中创建自定义序列化程序的最简单方法是什么?

注意:我知道我可以只返回一个流,但我不希望操作代码知道序列化的东西。

【问题讨论】:

    标签: .net wcf json serialization


    【解决方案1】:

    关于 WCF:如果您控制线路的两端(在“完整”.NET 上),那么应用自定义序列化程序相对简单 - 您添加从 DataContractSerializerOperationBehavior 继承的行为,并覆盖CreateSerializer - 请参阅here(带有属性here)。

    但是!我的理解(未经测试)是启用 JSON 的 WCF 服务不会使用此路由,而是会直接应用自己的序列化程序。

    【讨论】:

    • 这几乎可以工作,但我的 json 被包裹在一个 xml 根节点中,如下所示: {"Id":0,"IsFinalized":false,"IsTemplate":false}
    • 链接似乎已损坏。
    • 找到链接here
    【解决方案2】:

    非常好的文章:XmlSerializer vs DataContractSerializer: Serialization in Wcf。 Dan Rigsby 在那里展示了不同的场景以及如何更详细地制作您自己的序列化器。

    【讨论】:

    【解决方案3】:

    将 DataContract 的 IsReference 属性设置为 true,它在 .NET 3.5SP1 中可用

    [DataContract(IsReference = true)]
    public class Employee
    

    更多详情见。 MSDN DataContractAttribute.IsReference

    【讨论】:

      【解决方案4】:

      您可以使用此处提到的 ScriptIgnore 属性:- Ignoring a field during .NET JSON serialization; similar to [XmlIgnore]? 虽然我很期待实现你想要的东西,但不想装饰很多嵌套对象

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        • 2010-10-13
        • 2012-11-29
        • 1970-01-01
        • 2012-01-20
        相关资源
        最近更新 更多