【问题标题】:WCF/RESTful DataContract deserialization issueWCF/RESTful DataContract 反序列化问题
【发布时间】:2011-06-28 15:14:48
【问题描述】:

我正在尝试在 WCF 中实现一个安静的服务,但遇到的问题是该服务无法反序列化传递给它的 xml。它试图将根元素映射到操作合约而不是数据合约。例如,使用以下 XML 数据包,

<MyObject>
  <MyField1>asdf</MyField1>
  <MyField2>1234</MyField2>
  ...
</MyObject>

它无法将 MyObject 反序列化为输入消息,因为它需要该级别的操作合约。

我不想只使用所有字段作为操作合约的参数,因为 1) 参数会超过 5 个,以及 2) 它不会为扩展数据留出空间。

我设置了一个行为扩展来记录传入的请求。我应该只用根元素包装传入的消息以使其正确反序列化吗?或者有没有一种不那么老套的方法来完成这项工作——而不强迫客户改变实现?

谢谢

【问题讨论】:

  • 您能否提供有关正在调用的异常/客户端及其实现方式的更多详细信息..
  • 测试时我的客户是 Fiddler。 WcfTestClient.exe 清楚地缩进了操作的根元素,但客户端开发人员无法在我想要映射到我的数据合约的 &lt;MyObject&gt; 周围提供根节点。

标签: c# wcf wcf-rest


【解决方案1】:

我的解决方案是将我的运营合同更改为

[OperationContract(Action="*")]
void ProcessMessage(Message message);

并使用反序列化消息

var msg = message.GetBody<MyObject>();

使用我现有的 DataContract。

更新:我实际上选择使用 XmlSerializer 进行反序列化,因为它允许调用服务重新排列 xml blob 中字段的顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多