gpt4 book ai didi

c# - 无法将 JSON 序列化为字典

转载 作者:行者123 更新时间:2023-11-30 23:03:41 25 4
gpt4 key购买 nike

我在将 JSON 序列化为具有字典属性的类时遇到问题。
整个过程有点复杂,作为输入,我有一个 YAML 文件,我使用 YamlDotNet 将其转换为 json。和 NewtonSoft like so

这是 Yaml 和 JSON 输出的示例

some_element: '1'
should_be_dic_element:
- a: '1'
- b: '2'

{
"some_element": "1",
"should_be_dic_element": [
{
"a": "1"
},
{
"b": "2"
}
]
}

和类

 public class SomeClass
{
[JsonProperty(PropertyName = "some_element")]
public string SomeProperty { get; set; }

[JsonProperty(PropertyName = "should_be_dic_element")]
public Dictionary<string, string> Dictionary { get; set; }
}

我知道数组字典的问题,所以这就是我尝试过的所有方法。

使用字典我得到以下内容

error Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'System.Collections.Generic.Dictionary`2[System.String,System.String]' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array

像这样使用字典中的新类

[JsonArray]
class X : Dictionary<string, string> { }

error Value cannot be null. Parameter name: key

使用 KeyValuePair<string, string>[]/List<KeyValuePair<string, string>>结果是元素的数量,但具有空值。

有什么建议吗?

最佳答案

我认为您尝试反序列化的 JSON 不符合您的类定义。尝试更改生成 JSON 的方式。

对于字典类型的结构,我希望看到花括号 { 而不是 [ 来开始结构,例如:

{
"some_element": "1",
"should_be_dic_element": {
{
"a": "1"
},
{
"b": "2"
}
}
}

如果您想反序列化现有的 JSON 不变,请尝试使用您的类定义来指定字典列表:

 public class SomeClass
{
[JsonProperty(PropertyName = "some_element")]
public string SomeProperty { get; set; }

[JsonProperty(PropertyName = "should_be_dic_element")]
public List<Dictionary<string, string>> Dictionary { get; set; }
}

关于c# - 无法将 JSON 序列化为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49783076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com