【问题标题】:WCF custom XML serializationWCF 自定义 XML 序列化
【发布时间】:2011-03-06 17:43:03
【问题描述】:

在 WCF 中,如果我有这样的代码并且我以 XML 格式返回它,那么 XML 是自动生成的。 我是否可以明确指定将使用哪个 XML 来序列化 CustomerEntity?

[OperationContract]    
[WebInvoke(Method = "GET"]
CustomerEntity GetCustomer(int customerPk);

我目前使用的替代方法是返回一个 XElement,但这样做的问题是我也不能以这种方式支持 JSon。

更新:我的类型是不可变的并且使用 raedonly 属性,所以 IXmlSerializable 对我不起作用。

【问题讨论】:

    标签: wcf serialization rest config


    【解决方案1】:

    在 CustomerEntity 上实现 IXmlSerializable。

    【讨论】:

    • 有关实施 IXmlSerializable 的更多指导,请参阅stackoverflow.com/questions/279534/…
    • 事实证明这行不通,因为我的类型是不可变的,所以我无法实现 from xml :(
    • @wcf guru 如果它是不可变的,这将使反序列化类型有点棘手!
    • @wcf guru 你能返回一个实现 IXmlSerializable 接口的 CustomerEntityWrapper 类并创建真正的 CustomerEntity 作为包装器的属性吗?
    • 包装的想法很有效,如果我没有得到更好的建议,我会重新接受这个。我想知道我是否应该只使用稍微不同的调用模板来制作 2 个不同的函数,它们都为通用功能调用一个通用函数。
    【解决方案2】:

    您可以尝试使用原始消息,即使用从 Message 类派生的 Contract 类型,并通过覆盖 OnWriteBodyContents 和其他可覆盖的 Message 类成员以您想要的方式编写消息。请参考“从消息类继承” 在 MSDN 文章之后的 gof 部分了解有关 Message 类的可覆盖成员的更多信息, http://msdn.microsoft.com/en-us/library/ms734675.aspx

    HTH, 阿米特

    【讨论】:

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