无法反序列化当前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数组(例如[1,2,3])

您的JSONlist 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>();