我遇到了JSON DeserializeObject方法的問題。JSON反序列化一個或兩個數組
當我的XML文檔在Braches
節點內只有一個Branch
時,我得到一個錯誤,因爲我的類下面說分支是一個列表。我不確定如何繼續此操作,因爲<Branches>
內可能有一個<Branch>
或多個<Branch>
。
這是我的錯誤消息:
其他信息:不能反序列化當前JSON對象 (例如{ 「名稱」: 「值」})到類型 '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便利着想rted到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' – Alex
其實,這是一個錯誤。 JSON響應會返回@ Id和@ UserId和@名稱。這不是問題。在代碼中修復。 – Turp