如何解决我是否需要一个单独的自定义 JsonConverter 对象和该对象的数组?
我正在从文件中导入 Json。假设它看起来像这样
{
"name": "Test System","devices": [
{
"type": "Touchpanel","name": "Main Touchpanel","id": "1","model": "TS-1070"
},{
"type": "Display","name": "Front Display","id": "2","hasscreen": false
}
]
}
我要导入的类看起来像这样
class ConfigData
{
[JsonProperty("devices")]
[JsonConverter(typeof(ConfigConverter))]
public IConfig[] Devices { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
ConfigConverter 是一个自定义的 JsonConverter,它检查“类型”并确定设备应该是什么 IConfig 实现。如果我只是反序列化单个设备,这非常有效,但是一旦我移动到一组设备,转换器就会给我一个错误。显然,一组设备的反序列化与单个设备的反序列化不同。
是否有一种本地方式可以说“对于此阵列中的每个设备,都使用此转换器”?或者我是否必须制作一个单独的自定义转换器来处理一系列设备。我不希望在多个客户转换器中使用本质上相同的代码。
ConfigConverter 中的 ReadJson 如下所示
public override object ReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer)
{
var jsonObject = JObject.Load(reader);
var config = default(IConfig);
switch (jsonObject["type"].Value<string>().ToLower())
{
case "display":
config = new DisplayConfig();
break;
case "touchpanel":
config = new TouchpanelConfig();
break;
}
serializer.Populate(jsonObject.CreateReader(),config);
return config;
}
这适用于单个对象,不适用于数组。我可以设想重写它的方法,以便它可以与数组一起使用,但是所有这些都会导致它停止使用单个对象。寻找最简洁、最优雅的解决方案,让我拥有一个转换器,可以同时处理单个对象和该对象的数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。