【发布时间】:2011-06-19 14:51:24
【问题描述】:
我在 DataContractSerializer 和使用 IDataContractSurrogate 处理自定义类型序列化方面拥有丰富的经验。今天,我了解了 .NET 4.0 中的新 DataContractResolver,它似乎提供了一个类似且更松散耦合的 IDataContractSurrogate 实现。
我遇到的问题是我需要提供一些自定义的反序列化行为,这些行为被调用 Message.GetBody() 使用。
有问题的消息有效负载(除其他外)具有返回“对象”的公共读/写属性。人为的例子:
public class MessageContents
{
public int SomeValue { get; set; }
public object SomeData { get; set; }
}
...
MessageContents entity = new MessageContents { SomeValue = 1, SomeData = new Whatever() };
Message entityMessage = Message.CreateMessage(
MessageVersion.Soap12WSAddressing10,
String.Format("{0}Request", operation),
entity);
...
entityMessage.GetBody<MessageContents>()
GetBody() 调用会引发正常的“无法反序列化无法识别的类型 'Whatever'”的预期。直接使用DataContractSerializer时,解决问题没有问题,但是由于GetBody()使用了自己的DataContractSerializer,如何影响这种反序列化行为?
我直接处理消息的原因是因为有问题的服务接口正在返回大量流数据,而 WCF 要求我与消息类型形成我的操作合同。
我尝试将 DataContractSerializerOperationBehavior 行为添加到我的服务接口(针对每个操作),但注册的 DataContractResolver 永远不会被触发。
有人有什么建议吗?
【问题讨论】:
标签: wcf serialization datacontractserializer