我有一个接受JSON格式化请求的WCF Web服务。我在Web服务上有一个方法,它接受一个类型为Container的参数,该参数定义如下
[DataContract, KnownType(typeof(Foo))]
public class Container
{
[DataMember]
public IList<IFoo> SomeMember { get; set;}
}
Foo是IFoo的具体实现。客户端对我的命名空间和类型一无所知。然而,除非它们包含DataContract“类型提示”(即“__type”:“Foo#SomeNamespace”),否则它们会出现400错误,其堆栈跟踪显示“无法将类型对象”System.Object“转换为”SomeNamespace .IFoo”。
我有什么办法可以说服JSON反序列化程序将传入的JSON数组视为数组或Foo列表而不是对象数组而不必重新编译任何反序列化轮子?
答案 0 :(得分:1)
AFAIK DataContractJsonSerializer在这种情况下需要__type
字段才能知道要实例化的类型。如果您不想要此行为,则必须编写自定义绑定和自定义序列化。但即使在这种情况下,您也需要客户指出您希望使用具体类型。
或者为什么不直接使用具体类型:
[DataContract]
public class Container
{
[DataMember]
public Foo[] SomeMember { get; set; }
}