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