.net 通过检查WCF中传入的JSON进行动态类型选择?
我拥有发布到WCF服务的JSON对象的复杂继承权。根据设计和其他要求,每个JSON对象都有一个整数id,从概念上表示其类型或字段布局——我们称之为类型id 我想要完成的是,通过检查每个传入的整数类型id,控制为每个JSON对象的反序列化选择哪个.NET类型 输入示例:.net 通过检查WCF中传入的JSON进行动态类型选择?,.net,wcf,web-services,json,serialization,.net,Wcf,Web Services,Json,Serialization,我拥有发布到WCF服务的JSON对象的复杂继承权。根据设计和其他要求,每个JSON对象都有一个整数id,从概念上表示其类型或字段布局——我们称之为类型id 我想要完成的是,通过检查每个传入的整数类型id,控制为每个JSON对象的反序列化选择哪个.NET类型 输入示例: { "typeId": 4, "someField1": "foo", "someField2": "bar", "otherObject": { "typeId": 7 "someField
{
"typeId": 4,
"someField1": "foo",
"someField2": "bar",
"otherObject":
{
"typeId": 7
"someField3": "abc",
"someField4": "xyz"
}
}
理想过程示例:
1. I receive partially parsed object.
2. I inspect "typeId" which has value 4.
3. I notify the deserialization process that I elect to use my .NET type FooBarA.
4. I receive partially parsed object.
5. I inspect "typeId" which has value 7.
6. I notify the deserialization process that I elect to use my .NET type FooBarB.
这样或类似的做法是否可行?我似乎记得asmx风格的服务曾经包括一个_类型字段,类似于我的类型id,我想,但我不记得它的确切用途,也不记得是否可以在WCF中启用它作为替代方案。如果需要具体类型,您可以将传入的JSON收集为字符串,或者如果您处于基于REST的场景中,您可以将JSON作为非常有用的流,然后将其复制到MemoryStream中进行多次处理结束由于DataContractJsonSerializer在流外工作,因此最好的用例是将其转储到MemoryStream中 您正在描述的反序列化用例将很难实现,因为如果案例otherObject中的嵌套对象不是父类的成员(在本例中为FooBarA),那么反序列化过程将忽略该值,因为它无处放置该值 切换设备,一个更耗时的过程将使用Json.Net,您可以使用与Linq to XML类似的样式逐步处理Json。Net的优点是,它允许您使用不一定完全映射到具体类的Json。它在序列化链中不能很好地与WCF配合使用,但我在WCF端使用过几次它来处理提供的JSON,这些JSON与具体类所要查找的内容不完全匹配
您可以在这里找到Json.Net-在我的例子中,如果嵌套对象可能是父对象的一部分,则父目标类型将始终具有相应的强类型字段。在这种情况下,该类应该使用父类型的默认DataContractJsonSerializer正确反序列化,而无需您执行任何操作。似乎不需要。我认为,因为字段是作为基类键入的。我需要能够检查类型id,以了解用于反序列化的派生类。无论如何,我已经用Json.NET和一个JsonConverter解决了这个问题。谢谢