JSon.Net如何只为反序列化

时间:2015-11-13 14:11:09

标签: c# json serialization json.net

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

我是这样做的:

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

此行位于WebApiConfig文件中。

它工作正常,但我无法弄清楚如何将$ type限制为实际需要它的webservices(我只需要一个PUT和一个POST)。 $ type正在弄乱其他Web服务的API结果,我找不到一些TypeNameHandling配置,也没有一些序列化选项来避免这种情况。 有谁知道怎么做? 干杯!

2 个答案:

答案 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自定义。