我如何告诉WCF服务在将数据传回客户端时要使用哪些KnownType?
我知道我可以使用该[ServiceKnownType]属性,这使得服务调用从WCF测试服务器运行良好,但它仍然从客户端失败.我在这里错过了什么吗?
[OperationContract]
[ServiceKnownType(typeof(SubClassA))]
[ServiceKnownType(typeof(SubClassB))]
BaseClassZ GetObject();
Run Code Online (Sandbox Code Playgroud)
来自客户端的错误消息是:
{"元素'http://schemas.datacontract.org/2004/07/BaseClassZ'包含映射到名称'http://schemas.datacontract.org/2004/07/SubClassA'的类型的数据.反序列化器不知道映射到此名称的任何类型.考虑使用DataContractResolver或将与"SubClassA"对应的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将其添加到已知类型列表中传递给DataContractSerializer."}
使用DataContractSerializer和KnownTypes列表序列化/反序列化WCF服务器上的对象可以正常工作.
更新:如果我将KnownType属性添加到基类,我似乎可以让客户端正确读取对象,但我仍然在寻找解决方法,如果可能的话,因为基类用于很多项目而且我不喜欢我想在添加新项目时随时修改基类的KnownType属性.
[DataContract]
[KnownType(typeof(SubClassA))]
[KnownType(typeof(SubClassB))]
public class BaseClassZ
{
...
}
Run Code Online (Sandbox Code Playgroud)