我正在将自定义 Json 加载到自定义 getter/setter 类中,但是我对 IEnumerables 完全没有经验,并且有点卡住了。
Json:
{
'Item1': {'a': value, 'b': value, 'c': []},
}
将来,它可能包含多个 Item#,但该标准中始终会包含 A B 和 C。
使用NewtonSoft Json包,我正在做一个
JsonConvert.DeserializeObject<ConfigurationFile>(jsonConfig)
ConfigurationFile 类是我自己的,如下所示:
public class ConfigurationFile
{
public ItemInfo? item{ get; set; }
}
public class ItemInfo
{
public string a{ get; set; }
public string b { get; set; }
public string[]? c { get; set; }
}
问题就出在这里。所有项目均按预期正确设置。但为了为未来做准备,我需要阅读每个项目的 A、B 或 C 并做一些事情。
我得到的错误是,如果我开始一个
foreach (ConfigurationFile item in loadedJson)
{
...do something to item.a ...
}
然后我得到一个错误:ConfigurationFile 类只能在 foreach 中使用,如果它实现 IEnumerate 或 IEnumerate,或者合适的 GetEnumerator 方法。
我犯了什么错误?我唯一可以冒险的猜测是,我的 get/set 自定义类只能真正适用于 1 个项目,因此不能成为 for-each 语句的一部分......但我不确定如何开始工作出来了。
首先,JSON 使用双引号
"
,所以你的 JSON 应该是这样的:
{
"Item1": {"a": "value", "b": "value", "c": []}
}
为了简单起见,我假设存储在
c
中的数组将是简单的字符串数组,例如:"c": ["value1", "value2"]
因此我们可以将对象建模为:
public class Model
{
public string a { get; set; }
public string b { get; set; }
public string[] c { get; set; }
}
然后,在 JSON 对中
"key": "value"
是字典中的键和值对,因此,您的 JSON 可以被视为字典。将所有内容放在一起,这是可运行反序列化的代码片段:
var rawJson = @"{
""Item1"": {""a"": ""value"", ""b"": ""value"", ""c"": []}
}";
var dict = JsonSerializer.Deserialize<Dictionary<string, Model>>(rawJson);