【问题标题】:JSON Deserialize convert negative value to absoluteJSON反序列化将负值转换为绝对值
【发布时间】:2015-11-11 00:39:44
【问题描述】:

我正在使用JsonConvert.DeserializeObject<MyJson>(input) 来解析传入的字符串。

MyJson 类声明如下

public class MyJson
{
    public ClassA ClassA { get; set; }
    // some other classes
} 

public class ClassA
{ 
    public decimal? ValueA { get; set; }
    // some other values
}

而传入字符串input 的内容为

{"ClassA":{"ValueA":"-100.11"}}

解析没有抛出任何错误,所有值都解析成功,除了负值 -100.11 已转换为 100.11。

你知道这将如何发生吗?

【问题讨论】:

  • 如果您的输入是{"ClassA":{"ValueA":-100.11}},会发生什么?
  • 这是第三方输入,不可修改。我怀疑这是潜在的原因,但无法进一步证明。
  • 对我来说效果很好。这是一个小提琴 (dotnetfiddle.net/aSBJni)。
  • 无法复制。见小提琴:dotnetfiddle.net/9lu3JS
  • 对我也很好。这可能与特定于文化的解析行为有关。

标签: c# json deserialization


【解决方案1】:

你可以尝试指定CultureInfo进行反序列化:

var json = "{ \"ClassA\":{ \"ValueA\":\"-100.11\"} }";
var settings = new JsonSerializerSettings
{
    Culture = new CultureInfo("en")
};
var result = JsonConvert.DeserializeObject<MyJson>(json, settings);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多