当我尝试从JSON字符串反序列化为对象时,出现异常。Input string '46.605' is not a valid integer. Path 'LatitudeCenter'
这真的很奇怪,因为JsonConvert
尝试将反序列化为一个整数属性,但实际上是 double 而不是整数。
我已经 checkin 了Web API项目。我的类(class)中的属性是双重的,在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,
// ...
}
最佳答案
这很可能是因为您的区域设置使用了除“点”之外的其他内容来表示double
的整数部分之后的内容,例如fr-FR
区域性。
粗略的猜测是JsonConvert
类使用方法来解析.NET中的数字(没有理由不这样做),例如Double.TryParse。这些方法默认情况下会考虑您当前的文化。
尝试将JsonConvert
的区域性设置为CultureInfo.InvariantCulture
。