我有一个包含一些对象的公共库。然后我有一个引用公共库的服务项目,并从公共库中的对象创建一些派生类型。
我希望我的服务将派生类型序列化为公共库中定义的基类型。
我不能在公共库中的对象上使用KnownTypes,因为我不希望公共库引用服务程序集。
那么如何将wcf序列化派生类型作为其基类型?
我希望我能做点像......
[DataContract(SerializeAsType = typeof(BaseType))] 公共类DerivedType:BaseType { }
这样的事情可能吗?
答案 0 :(得分:7)
我们通过设置继承的类[DataContract(Name =“BaseClass”)]来“解决”这个问题。即使继承的类是内部的并且在另一个项目中定义,它也可以工作。
希望它有所帮助。
答案 1 :(得分:3)
您使用的是.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 http://msdn.microsoft.com/en-us/library/system.servicemodel.description.datacontractserializeroperationbehavior.aspx为WCF配置。