无法反序列化当前JSON数组(例如[1,2,3])
本文关键字:例如 反序列化 数组 JSON | 更新日期: 2023-09-27 18:22:16
我有一个Json:
[
[
[
{
"origin": [
-15.2941064136735,
-0.43948581648487,
4.83674058264479
],
"dimensions": [
10.4597624323399,
11.6903227184975,
9.67348116528958
],
"primitive": "block"
}
],
[
{
"origin": [
-15.2941064136735,
-0.43948581648487,
4.83674058264479
],
"dimensions": [
10.4597624323399,
11.6903227184975,
9.67348116528958
],
"primitive": "block"
}
],
[
{
"origin": [
-15.2941064136735,
-0.43948581648487,
4.83674058264479
],
"dimensions": [
10.4597624323399,
11.6903227184975,
9.67348116528958
],
"primitive": "block"
}
]
]
]
这个Json的模型:
public class BoxConverter
{
[JsonProperty("origin")]
public List<double> Origin { get; set; }
[JsonProperty("dimensions")]
public List<double> Dimensions { get; set; }
[JsonProperty("primitive")]
public string Primitive { get; set; }
}
我尝试从文件中的json中获取对象列表。
string strLocal = File.ReadAllText("2.txt");
var convertLocal = JsonConvert.DeserializeObject<List<BoxConverter>>(strLocal);
但我有一个例外:
无法将当前JSON数组(例如[1,2,3])反序列化为类型因为该类型需要一个JSON对象(例如{"name":"value"})正确反序列化。
要修复此错误,请将JSON更改为JSON对象(例如。{"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection、IList)比如可以从JSON数组反序列化的List。JsonArrayAttribute也可以添加到类型中,以强制它从JSON数组反序列化。
路径"[0]",第1行,位置2。
我做错了什么?
更新
使用此JSON可以完美工作:
[{"attributes":{"materialProperties":{"color":"red","wireframe":false}},"dimensions":[10.4597624323399,11.6903227184975,9.67348116528958],"origin":[-15.2941064136735,-0.43948581648487,4.83674058264479],"primitive":"block"}]
您的JSON
是list of a list of a list of BoxConverter
。
你需要这样做:
var convertLocal = JsonConvert.DeserializeObject<List<List<List<BoxConverter>>>>(strLocal)
你的BoxConverter
课很好。
如果你的json
嵌套了未知的次数(你可能应该首先说明为什么会这样),你可以这样做:
var superHack = JsonConvert.DeserializeObject<dynamic>(json);
var currentObject = superHack;
while(currentObject is JArray)
currentObject = currentObject[0];
var foundObject = currentObject as JObject;
var convertLocal = foundObject.ToObject<BoxConverter>();