自定义类中的C# Json反序列化对象,要在foreach循环中使用,需要IEnumerable

问题描述 投票:0回答:1

我正在将自定义 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 语句的一部分......但我不确定如何开始工作出来了。

c# json foreach ienumerable
1个回答
0
投票

首先,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);
© www.soinside.com 2019 - 2024. All rights reserved.