当前位置:  开发笔记 > 编程语言 > 正文

反序列化为double时,JsonConvert会抛出一个"非有效整数"异常

如何解决《反序列化为double时,JsonConvert会抛出一个"非有效整数"异常》经验,为你挑选了1个好方法。

当我尝试从JSON字符串反序列化为对象时,我得到一个异常.

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

这真的很奇怪,因为JsonConvert尝试将属性反序列化为整数但它实际上是一个double而不是整数.

我已经检查了我的Web API项目.我的类中的属性是web项目中的double和same.

我在web asp项目中使用的代码:

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&);
    string jsonData = response.Content.ReadAsStringAsync().Result;

    //Exception here
    NewMap dataMewMap = JsonConvert.DeserializeObject(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,
    // ...
}

Aybe.. 8

这很可能是因为您的区域设置使用"点"之外的其他内容来表示在整数部分之后的内容double,例如fr-FR文化.

粗略的猜测是,JsonConvert类使用方法来解析.NET中的数字(毕竟没有理由),例如Double.TryParse.而这些非常方法在默认情况下做的,考虑到你目前的文化.

尝试设置JsonConvertto 的文化CultureInfo.InvariantCulture.



1> Aybe..:

这很可能是因为您的区域设置使用"点"之外的其他内容来表示在整数部分之后的内容double,例如fr-FR文化.

粗略的猜测是,JsonConvert类使用方法来解析.NET中的数字(毕竟没有理由),例如Double.TryParse.而这些非常方法在默认情况下做的,考虑到你目前的文化.

尝试设置JsonConvertto 的文化CultureInfo.InvariantCulture.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有