我正在使用返回这样的JSON的API(简化为相关的道具):
{"坐标":[[[[ - 119.999267578125,38.9594087924542],[-120.08056640625,38.9764924924855394] 56640625,39.2152313091049],[-119.94873046875,39.2152313091049]]]]}
您会注意到这些数字的精度比浮子更高。我创建了以下课程来保持这一点:
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。路径'坐标[0] [0] [0]',第1行,位置34。
我做错了什么吗?据我所知,这似乎是Newtonsoft的错误。
您的JsonParseTest
应该看起来像:
public class JsonParseTest
{
public List<decimal[,]> coordinates { get; set; }
}
即。删除一个List<>
的水平。您的当前类对应于四个级别的括号嵌套(每个List<>
,两个,decimal [,]
),但您的JSON只有三个层次。
为了自己发现,您可以将班级的示例序列化为JSON。如果这样做,您会看到额外的筑巢。