【问题标题】:JsonConvert throws a 'not a valid integer' exception when deserializing to a double反序列化为双精度时,JsonConvert 抛出“不是有效整数”异常
【发布时间】:2015-12-29 18:15:53
【问题描述】:

当我尝试从 JSON 字符串反序列化为对象时遇到异常。

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

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

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

我在我的 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&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,
    // ...
}

【问题讨论】:

  • 我们可以看看您尝试反序列化的一些 json 吗?
  • 当然,谢谢。我现在添加它
  • 仅使用部分NewMap 合约、您的JSON 输入以及代码的最后一行,一切对我来说都很好。这里没有问题。浮点数被正确识别,没有错误。
  • 您的区域设置是否使用点以外的内容? msdn.microsoft.com/en-us/library/994c0zb1(v=vs.110).aspx
  • 谢谢大家!!我找到了。因为我试图像@Aybe 所说的那样使用特定的 CultureInfo 。您可以将其添加为答案吗?

标签: c# json asp.net-web-api double deserialization


【解决方案1】:

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

一个粗略的猜测是JsonConvert 类使用从.NET 中解析数字的方法(毕竟没有理由不这样做),例如Double.TryParse。而这些 very 方法默认会考虑您的当前文化

尝试将JsonConvert 的文化设置为CultureInfo.InvariantCulture

【讨论】:

【解决方案2】:

我用过:

Replace(".0,","") 

它对我有用

【讨论】:

  • 这是一种一次性解决方案,需要在每个反序列化点实施,并且无法解决使用不同本地化设置反序列化数据时可能发生的任何类似错误。鉴于此,接受的答案提出的方法不仅更容易,而且可以解决其他尚未发现的问题。
猜你喜欢
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多