JSon.Net如何具有仅用于反序列化的$type

本文关键字:反序列化 type 用于 Net 何具 JSon | 更新日期: 2023-09-27 18:21:45

我在Json中使用$type属性来反序列化继承的对象(以选择在运行时反序列化的正确对象类型)

我使用

config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings{ TypeNameHandling = TypeNameHandling.Objects} 

这一行在WebApiConfig文件中。

它工作得很好,但我不知道如何将$类型仅限于实际需要它的Web服务(我只需要一个PUT和一个POST)。$类型正在扰乱其他Web服务的API结果,我找不到一些TypeNameHandling配置或一些序列化选项来避免这种情况。有人知道怎么做吗?干杯

JSon.Net如何具有仅用于反序列化的$type

要在嵌套对象上启用类型名称处理,可以将[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自定义。