【发布时间】:2023-03-29 15:02:02
【问题描述】:
我遇到了 JSON DeserializeObject 方法的问题。
当我的 XML 文档在 Braches 节点内只有一个 Branch 时,我收到一个错误,因为我下面的类说分支是一个列表。我不确定如何进行此操作,因为<Branches> 中可能有一个<Branch> 或多个<Branch>。
这是我的错误消息:
附加信息:无法反序列化当前 JSON 对象 (例如 {"name":"value"}) 类型为 'PluginConsoleTestCode.Branch[]' 因为该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。
要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3]) 或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是像整数这样的原始类型,不是集合类型 像数组或列表)可以从 JSON 对象反序列化。 JsonObjectAttribute 也可以添加到类型中以强制它 从 JSON 对象反序列化。
路径 'Openers.Opener[2].Branches.Branch.@id',第 1 行,位置 689。
我的代码片段:
// XML to JSON then JSON to RootObject
var json = JsonConvert.SerializeXmlNode(xmlDoc);
var response = JsonConvert.DeserializeObject<RootObject>(json);
这是我的 XML:
<Openers>
<Opener Name="Name1" UserId="username">
<Branches>
<Branch id="103"></Branch>
<Branch id="104"></Branch>
<Branch id="105"></Branch>
<Branch id="106"></Branch>
<Branch id="107"></Branch>
<Branch id="108"></Branch>
</Branches>
</Opener>
<Opener Name="Name2" UserId="username">
<Branches>
<Branch id="109"></Branch>
<Branch id="110"></Branch>
<Branch id="111"></Branch>
<Branch id="112"></Branch>
</Branches>
</Opener>
<Opener Name="Name3" UserId="username">
<Branches>
<Branch id="113"></Branch>
</Branches>
</Opener>
</Openers>
XML 转换为 JSON:
{
"Openers": {
"Opener": [
{
"@Name": "Name1",
"@UserId": "username",
"Branches": {
"Branch": [
{ "@id": "103" },
{ "@id": "104" },
{ "@id": "105" },
{ "@id": "106" },
{ "@id": "107" },
{ "@id": "108" }
]
}
},
{
"@Name": "Name2",
"@UserId": "username",
"Branches": {
"Branch": [
{ "@id": "109" },
{ "@id": "110" },
{ "@id": "111" },
{ "@id": "112" }
]
}
},
{
"@Name": "Name3",
"@UserId": "username",
"Branches": {
"Branch": { "@id": "113" }
}
}
]
}
}
这是我的课程:
public class Branch
{
[JsonProperty("@id")]
public string Id { get; set; }
}
public class Branches
{
[JsonProperty("Branch")]
public List<Branch> Branch { get; set; }
}
public class Opener
{
[JsonProperty("@Name")]
public string Name { get; set; }
[JsonProperty("@UserId")]
public string UserId { get; set; }
public Branches Branches { get; set; }
}
public class Openers
{
public List<Opener> Opener { get; set; }
}
public class RootObject
{
public Openers Openers { get; set; }
}
【问题讨论】:
-
您在 JSON 中有
-UserId和-Name。 -
@DanielA.White 和
-id而不是id -
其实那是个错误。 JSON 响应返回 @Id 和 @UserId 和 @Name。那不是问题。已在代码中修复。
-
问题在于创建 JSON 时使用单个
Branch元素,其中包含多个Id元素,而不是Branches中的多个Branch元素,每个元素都有一个 @ 987654338@元素。 -
您对创建的 XML 有控制权吗?
标签: c# xml json json.net deserialization