如何精确反序列化小数 属性

How to deserialize decimal property with precision

在我的 WEb Api 中,我返回 json 是这样的:

  class Test
  {
    public decimal Dec { get; set; }
  }

  Test test = new Test() { Dec = 1.00m };
  var json = JsonConvert.SerializeObject(test, Formatting.Indented);
  return json;

目前,json是

{
  "Dec": 1.00
}

我正在尝试这样测试它:

var dictionary = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
var decimalValue = dictionary["Dec"]; // I am expecting 1.00 but it is 1

它得到的是 1 而不是 1.00。但是当我这样做时:

        var myTest = JsonConvert.DeserializeObject<Test>(json);
        var decimalValue = myTest.Dec; // It is 1.00 

1.00。但问题是我不能在我的测试中使用 Test class 。问题是为什么将它反序列化为字典后它是 1?我应该创建一个新的 class 像 'Test' 还是有什么办法可以解决这个问题?

所以,在 JsonSerializerSettings 中将 FloatParseHandling 设置为 Decimal 解决了我的问题:

    var dictionary = JsonConvert.DeserializeObject<Dictionary<string, object>>(json, new JsonSerializerSettings() { FloatParseHandling = FloatParseHandling.Decimal });
    var decimalValue = dictionary["Dec"];