[英]Deserializing JSON object throws a Newtonsoft.Json.JsonSerializationException
我有這個Json對象:
{
"Sheet1": [
{
"one": 1,
"two": 18
},
{
"one": 16,
"two": 33
},
{
"one": 17,
"two": 34
}
]
}
我正在嘗試使用以下模型反序列化它:
public class Sheets
{
[JsonProperty("Sheet1")]
public Sheet Sheet { get; set; }
}
public class Sheet
{
public List<Row> Rows { get; set; }
}
public class Row
{
[JsonProperty("one")]
public string Col1 { get; set; }
[JsonProperty("two")]
public string Col2 { get; set; }
}
var res = JsonConvert.DeserializeObject<Sheets>(result);
但我得到這個例外:
Newtonsoft.Json.dll中發生了類型為'Newtonsoft.Json.JsonSerializationException'的未處理異常
附加信息:無法將當前JSON數組(例如[1,2,3])反序列化為類型'ExcelConsoleApp.Sheet',因為該類型需要JSON對象(例如{“ name”:“ value”})才能正確反序列化。
我究竟做錯了什么? 有什么想法嗎?
編輯
一種可能的解決方案是使用
dynamic dynamicObject = JsonConvert.DeserializeObject(result);
但我想直接將其反序列化到模型中。
Sheet1
不是工作表類型,而是行列表 。 可以通過方括號來識別。
即"Sheet1": [
這是Collection的清晰符號,而不是由{
標識的Object。
將工作表更改為以下內容:
public class Sheets
{
[JsonProperty("Sheet1")]
public List<Row> Sheet { get; set; }
}
這是您需要的模型,我對其進行了測試,並且它完全可以按照您的要求工作。 無需更改JSON結構。
public class SheetRoot
{
[JsonProperty("Sheet1")]
public List<Row> Sheet { get; set; }
}
public class Row
{
[JsonProperty("one")]
public int Col1 { get; set; }
[JsonProperty("two")]
public int Col2 { get; set; }
}
var res = JsonConvert.DeserializeObject<SheetRoot>(s);
如錯誤所示,您應該使用列表而不是Sheet
類。 嘗試這個:
{"Sheets" :
{
"Sheet1": [
{
"one": 1,
"two": 18
},
{
"one": 16,
"two": 33
},
{
"one": 17,
"two": 34
}
]
}
}
您的結構不兼容。
從JSON Sheet1[i].two
,示例對象可以遍歷為Sheet1[i].one
或Sheet1[i].two
。 i
是索引。 而您發布的C#模型將作為SheetsObj.Sheet.Row[i].Col1
。
您可以嘗試更改JSON或模型。 因此,也許將JSON更改為
{
"Sheet1" : {
"Rows": [
{
"one": 1,
"two": 18
},
{
"one": 16,
"two": 33
},
{
"one": 17,
"two": 34
}
]
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.