我在Json中使用$ type属性来对继承对象进行反序列化(选择在运行时反序列化的正确对象类型)
我是这样做的:
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings{ TypeNameHandling = TypeNameHandling.Objects}
此行位于WebApiConfig文件中。
它工作正常,但我无法弄清楚如何将$ type限制为实际需要它的webservices(我只需要一个PUT和一个POST)。 $ type正在弄乱其他Web服务的API结果,我找不到一些TypeNameHandling配置,也没有一些序列化选项来避免这种情况。 有谁知道怎么做? 干杯!
答案 0 :(得分:1)
要在嵌套对象上启用类型名称处理,可以将[JsonProperty(ItemTypeNameHandling = TypeNameHandling.Objects)]
附加到包含属性,如下所示:
public class RootObject
{
[JsonProperty(ItemTypeNameHandling = TypeNameHandling.Objects)]
public object Data { get; set; }
}
没有内置方法可以在特定类型上启用类型名称处理,因此没有内置方法可以在根对象上启用类型名称处理。相反,如果您需要,可以使用SignalR Typenamehandling中的EnableJsonTypeNameHandlingConverter
。
答案 1 :(得分:0)
感谢dbc的帮助。在反序列化期间我遇到了其他问题(使用OData.Delta对象,你提出的解决方案实际上并不完全符合需要。 由于这篇文章,我克服了这个问题:Custom Json.NET serializer settings per type 只为几个Web服务进行$ type自定义。