Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JSon.Net如何将$type仅用于反序列化_C#_Json_Serialization_Json.net - Fatal编程技术网

C# JSon.Net如何将$type仅用于反序列化

C# JSon.Net如何将$type仅用于反序列化,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,我使用Json中的$type属性反序列化继承的对象(以选择在运行时反序列化的正确对象类型) 我使用以下方法进行此操作: config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings{ TypeNameHandling = TypeNameHandling.Objects} 该行位于WebApiConfig文件中 它工作得很好,但我不知道如何将$type仅限于真正需要它的Web服务(我只需要一次P

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

我使用以下方法进行此操作:

config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings{ TypeNameHandling = TypeNameHandling.Objects} 
该行位于WebApiConfig文件中

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

要在嵌套对象上启用类型名称处理,可以附加到包含属性,如下所示:

public class RootObject
{
    [JsonProperty(ItemTypeNameHandling = TypeNameHandling.Objects)]
    public object Data { get; set; }
}

没有内置方法可以在特定类型上启用类型名称处理,因此也没有内置方法可以在根对象上启用类型名称处理。相反,如果需要,您可以使用中的启用JSONTypeNameHandlingConverter。

感谢dbc的帮助。我在反序列化过程中遇到了其他问题(使用OData.Delta对象,而您提出的解决方案实际上并不完全符合需要)。 多亏了这篇文章,我克服了这个问题:
仅对少数Web服务进行$type自定义。

根对象需要$type还是嵌套对象需要$type?嵌套对象需要$type。至少现在……我仍然可以重构并在根位置使用它。