使用JsonConverter反序列化JSON字典值

我使用Json.NET库来反序列化JSON。 对于抽象类Foo我有一个自定义的JsonConverter 。 这是我使用它的方式:

 [JsonConverter(typeof(FooJsonConverter))] public Foo MyFoo { get; set; } 

到现在为止还挺好。 当我在Dictionary中使用Foo类时会出现问题。 这是我的尝试:

 [JsonDictionary(ItemConverterType = typeof(FooJsonConverter))] public Dictionary MyFooDictionary { get; set; } 

但上面给出了错误:

属性“JsonDictionary”在此声明类型上无效。 它仅对“类,接口”声明有效。

如何为Dictionary值指定转换器?

使用[JsonProperty]代替[JsonDictionary]

 [JsonProperty(ItemConverterType = typeof(FooJsonConverter))] public Dictionary MyFooDictionary { get; set; } 

小提琴: https : //dotnetfiddle.net/QJCtBg

另一种方法是将转换器添加到JsonSerializerSettings并将其传递给JsonConvert.DeserializeObject

 var settings = new JsonSerializerSettings(); settings.Converters.Add(new FooJsonConverter()); var obj = JsonConvert.DeserializeObject(json, settings); 

将属性添加到您的Foo类。 这可能是因为您的词典可能包含两种不同的类型,并且该属性不知道您指的是哪一种。

 [JsonDictionary(ItemConverterType = typeof(FooJsonConverter))] public class Foo { ... }