使用JsonConverter反序列化JSON字典值

本文关键字:字典 JSON 反序列化 JsonConverter 使用 | 更新日期: 2023-09-27 18:21:50

我使用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; }

但上面给出了错误:

特性"JsonDictionary"对此声明类型无效。是的仅对"class,interface"声明有效。

如何为Dictionary值指定转换器?

使用JsonConverter反序列化JSON字典值

使用[JsonProperty]而不是[JsonDictionary]

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

Fiddle:https://dotnetfiddle.net/QJCtBg

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

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

将属性添加到Foo类中。这可能是因为你的字典可能包含两种不同的类型,而属性不知道你指的是哪一种

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