JsonConvert抛出一个';不是有效的整数';反序列化为double时发生异常

本文关键字:整数 反序列化 异常 double 有效 JsonConvert 一个 | 更新日期: 2023-09-27 18:28:27

当我试图从JSON字符串反序列化到对象时,我遇到了一个异常。

Input string '46.605' is not a valid integer. Path 'LatitudeCenter'

这真的很奇怪,因为JsonConvert试图将属性反序列化为整数,但实际上它是一个双精度而不是整数。

我已经签入了我的Web API项目。在web项目中,我类中的属性是双重的。

我在我的网页项目中使用的代码:

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("myWebApiHostedUrl");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    // Get the response
    HttpResponseMessage response = await client.GetAsync("api/NewMap/?SouthLatitude=46.600&WestLongitude=7.085&NorthLatitude=46.610&EastLongitude=7.095&Width=900&Height=900&isVoxelMap=true");
    string jsonData = response.Content.ReadAsStringAsync().Result;
    //Exception here
    NewMap dataMewMap = JsonConvert.DeserializeObject<NewMap>(jsonData, new JsonSerializerSettings() { Culture = CultureInfo.InvariantCulture,FloatParseHandling= FloatParseHandling.Double });
}

这是我的课:

public class NewMap
{
    // ...
    public double LatitudeCenter { get; set; }
    public double LongitudeCenter { get; set; }
    // ...
}

我的JSON内容:

{
    // ...
    "LatitudeCenter":46.605,
    "LongitudeCenter":7.09,
    "SouthLatitude":46.6,
    "ImageBingUrl":null,
    "PercentEnvironement_Plain":0,
    // ...
}

JsonConvert抛出一个';不是有效的整数';反序列化为double时发生异常

这很可能是因为您的区域设置使用'dot'以外的东西来表示double的整数部分之后的内容,例如fr-FR区域性。

一个粗略的猜测是,JsonConvert类使用从.NET解析数字的方法(没有理由不这样做),例如Double.TryParse。这些非常的方法默认情况下会这样做,并考虑到您的当前区域性

尝试将JsonConvert的区域性设置为CultureInfo.InvariantCulture

我使用过:

Replace(".0,","") 

它对我有效