使用Newtonsoft

时间:2017-02-24 22:54:55

标签: c# json json.net

我正在使用返回JSON的API(简化为相关道具):

{"坐标":[[[ - 119.99267578125,38.9594087924542],[ - 120.08056640625,38.9764924855394],[ - 120.146484375,39.0789080970648],[ - 120.08056640625,39.2152313091049],[ - 119.94873046875,39.2152313091049] [-119.99267578125,38.9594087924542]]]}

您会注意到这些数字的精度高于浮点数。我已经创建了以下类来保存它:

    public class JsonParseTest
    {
        public List<List<decimal[,]>> coordinates { get; set; }
    }

我正在使用此代码进行解析:

        try
        {
            var json = "{\"coordinates\":[[[-119.99267578125,38.9594087924542],[-120.08056640625,38.9764924855394],[-120.146484375,39.0789080970648],[-120.08056640625,39.2152313091049],[-119.94873046875,39.2152313091049],[-119.99267578125,38.9594087924542]]]}";
            var obj = JsonConvert.DeserializeObject<JsonParseTest>(json, new JsonSerializerSettings()
            {
                FloatParseHandling = FloatParseHandling.Decimal
            });
        }
        catch (Exception ex)
        {

        }

例外是:

反序列化多维数组时出现意外的标记:Float。路径&#39;坐标[0] [0] [0]&#39;,第1行,第34位。

我做错了吗?据我所知,这似乎与牛顿软件有关。

1 个答案:

答案 0 :(得分:1)

您的JsonParseTest应如下:

public class JsonParseTest
{
    public List<decimal[,]> coordinates { get; set; }
}

即。删除List<>的一个级别。您当前的类对应于四个级别的括号嵌套(每个List<>一个,decimal [,]两个),但您的JSON只有三个嵌套级别。

要自己发现这一点,您可以将类的示例序列化为JSON。如果你这样做了,你会看到额外的嵌套。