无法反序列化当前的JSON数组(例如[1,2,3])

时间:2015-11-17 11:35:27

标签: c# json

我有一个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"}] 

1 个答案:

答案 0 :(得分:0)

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