使用JsonConverter反序列化JSON字典值

时间:2015-11-12 15:12:13

标签: c# json json.net

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

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

到目前为止一切顺利。当我在Dictionary中使用Foo类时会出现问题。这是我的尝试:

[JsonDictionary(ItemConverterType = typeof(FooJsonConverter))]
public Dictionary<string, Foo> MyFooDictionary { get; set; }

但上面给出了错误:

  

属性&#39; JsonDictionary&#39;对此声明类型无效。它是   仅适用于&#39;类,界面&#39;声明。

如何为Dictionary值指定转换器?

2 个答案:

答案 0 :(得分:3)

使用[JsonProperty]代替[JsonDictionary]

[JsonProperty(ItemConverterType = typeof(FooJsonConverter))]
public Dictionary<string, Foo> MyFooDictionary { get; set; }

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

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

var settings = new JsonSerializerSettings();
settings.Converters.Add(new FooJsonConverter());

var obj = JsonConvert.DeserializeObject<ObjType>(json, settings);

答案 1 :(得分:-1)

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

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

    ...

}