【问题标题】:How to apply a custom JsonConverter to values in a Dictionary? [duplicate]如何将自定义 JsonConverter 应用于字典中的值? [复制]
【发布时间】:2016-04-11 11:45:52
【问题描述】:

我正在尝试序列化和反序列化复杂的对象树,其中一些对象需要自定义 JsonConverter。将这样的转换器应用于属性是简单对象的对象属性很容易,但我不知道在属性是集合的情况下如何应用。

例如:

[JsonObject(MemberSerialization.OptIn)]
public class Settings
{
    [JsonProperty] public Dictionary<string, Color> ColorSet;
    [JsonProperty, JsonConverter(typeof(ColorConverter))] public Color CurrentColor;
}

Color 是一种需要其自己的 JsonConverter 的类型(仅供参考:这是 Xamarin.Forms.Color,它不会开箱即用地从 Json 反序列化)。

使用

Settings newSettings = JsonConvert.DeserializeObject<Settings>(jsondata);

产生一个正确初始化 CurrentColor 对象的新 Settings 对象。如何将相同的 ColorConverter JsonConverter 应用到颜色字典?

同样的问题也适用于递归对象树:

[JsonObject(MemberSerialization.OptIn)]
public class DisplayPanel
{
    [JsonProperty] public List<DisplayPanel> Children;
}

DisplayPanel 需要自己的 JsonConverter。

问题不在于每个对象都是某个基类的(未知)派生类; Dictionary / List 中的每个 Color / DisplayPanel 对象都有完全相同的类。

【问题讨论】:

标签: c# json dictionary


【解决方案1】:

编写一个方法,遍历 ColorSet 字典的每个 Color 并在每个字典上调用 JsonConvert.DeserializeObject() 转换器。在初始化字典时调用此方法。

【讨论】:

  • 或许可以让它以这种方式工作,但迭代确实显得不必要地笨重
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
相关资源
最近更新 更多