Dan*_*rbo 12 wcf serialization datacontract datacontractserializer
我有一个包含一些对象的公共库.然后我有一个引用公共库的服务项目,并从公共库中的对象创建一些派生类型.
我希望我的服务将派生类型序列化为公共库中定义的基类型.
我不能在公共库中的对象上使用KnownTypes,因为我不希望公共库引用服务程序集.
那么如何将wcf序列化派生类型作为其基类型?
我希望我能做点像......
[DataContract(SerializeAsType = typeof(BaseType))] public class DerivedType:BaseType {}
有可能这样吗?
我们刚刚通过设置继承类[DataContract(Name ="BaseClass")]来"解决"这个问题.即使继承的类是内部的并且在另一个项目中定义,它也可以工作.
希望能帮助到你.
您使用的是.NET 4.0吗?如果您属于以下情况,则可以使用 DataContractResolver 来实现此目的:
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractresolver.aspx
这基本上也是 Entity Framework 4.0 为其代理类型的 DataContractResolver 所做的事情。
这是一个例子: 链接
(请参阅链接中的 DeserializeAsBaseResolver)。
编辑:如果您不使用.NET 4.0,我认为您的下一个最佳选择是 DataContractSurrogate:http://msdn.microsoft.com/en-us/library/system.runtime.serialization.idatacontractsurrogate.aspx。...所以您可以手动控制序列化,但这可能会变得混乱。
两者都传递到 DataContractSerializer 的构造函数中,并且可以通过 DataContractSerializerOperationBehavior 为 WCF 配置: http: //msdn.microsoft.com/en-us/library/system.servicemodel.description.datacontractserializeroperationbehavior.aspx。