如何精确反序列化小数 属性
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"];
在我的 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"];