使用 JsonConverter 反序列化 JSON 字典值

hol*_*s83 4 c# json json.net

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

[JsonConverter(typeof(FooJsonConverter))]
public Foo MyFoo { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

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

但是上面给出了错误:

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

如何为字典值指定转换器?

Bri*_*ers 6

使用[JsonProperty]代替[JsonDictionary]

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

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

另一种选择是将您的转换器添加到JsonSerializerSettings并将其传递给JsonConvert.DeserializeObject.

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

var obj = JsonConvert.DeserializeObject<ObjType>(json, settings);
Run Code Online (Sandbox Code Playgroud)