【发布时间】: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 对象都有完全相同的类。
【问题讨论】:
-
最简单的方法可能是使用
[JsonConstructor]标志并编写一个构造函数,该构造函数接受 json 数据并按照您认为合适的方式构建集合。 -
查看这个答案:stackoverflow.com/questions/11754633/…。我认为解决方案就在那里
-
谢谢 dbc,就是这样
标签: c# json dictionary