我有这个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);
但我想将它直接反序列化到我的模型中。
答案 0 :(得分:2)
Sheet1
不是图纸类型,而是行列表。这可以用括号标识。
即"Sheet1": [
这是集合的明确标志,而不是由{
标识的对象。
将表格更改为以下内容:
public class Sheets
{
[JsonProperty("Sheet1")]
public List<Row> Sheet { get; set; }
}
答案 1 :(得分:2)
这是你需要的模型,我测试了它,它完全按照你的意愿工作。 并且无需更改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);
答案 2 :(得分:0)
如显示错误,您应该使用列表而不是Sheet
类。
试试这个:
{"Sheets" :
{
"Sheet1": [
{
"one": 1,
"two": 18
},
{
"one": 16,
"two": 33
},
{
"one": 17,
"two": 34
}
]
}
}
答案 3 :(得分:0)
您的结构不兼容。
从JSON推断,示例对象可以被移动为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
}
]
}
}