我有一个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”})或将反序列化类型更改为数组或a 实现集合接口的类型(例如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"}]
答案 0 :(得分:0)
您的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>();