WCF强制转换反序列化JSON

时间:2011-10-05 17:08:35

标签: c# wcf json

我有一个接受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列表而不是对象数组而不必重新编译任何反序列化轮子?

1 个答案:

答案 0 :(得分:1)

AFAIK DataContractJsonSerializer在这种情况下需要__type字段才能知道要实例化的类型。如果您不想要此行为,则必须编写自定义绑定和自定义序列化。但即使在这种情况下,您也需要客户指出您希望使用具体类型。

或者为什么不直接使用具体类型:

[DataContract]
public class Container
{
    [DataMember]
    public Foo[] SomeMember { get; set; }
}