我正在使用返回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位。
我做错了吗?据我所知,这似乎与牛顿软件有关。
答案 0 :(得分:1)
您的JsonParseTest
应如下:
public class JsonParseTest
{
public List<decimal[,]> coordinates { get; set; }
}
即。删除List<>
的一个级别。您当前的类对应于四个级别的括号嵌套(每个List<>
一个,decimal [,]
两个),但您的JSON只有三个嵌套级别。
要自己发现这一点,您可以将类的示例序列化为JSON。如果你这样做了,你会看到额外的嵌套。