提问人:Suhaib Ahmad 提问时间:9/26/2023 最后编辑:Suhaib Ahmad 更新时间:10/2/2023 访问量:55
将 .NET 对象序列化为 JSON:“double”属性值将写入具有额外小数位的不同值
Serialising .NET object to JSON: `double` property value gets written as a different value with extra decimal places
问:
我用于在 .NET Well 类对象和 JSON 之间(反)序列化。Well 类对象具有 List of layers ,而 Layer 类具有 Items 列表,该类具有 、 等属性。课程如下:System.Text.Json
List<Layer> layers
List<Item> items
Item
string name
double length
public class Well
{
public string name {get; set;}
public List<Layer> layers {get; set;}
public void serialiseJSON()
{
string fileName = "well.json";
string jsonString = JsonSerialiser.Serialize(this);
File.WriteAllText(fileName, jsonString);
return;
}
}
public class Layer
{
public string name {get; set;};
public List<Item> items {get; set;}
}
public class Item
{
public string name {get; set;};
public double length {get; set;}
}
例如,当值为 时,它会在序列化 Well 后写入文件。据我所知,如果我错了,请纠正我,这是由于 double 数据类型的精度,但我不明白为什么 double 值的写法不同。类实例具有正确的值,但将其序列化为 json 文件会在文件中更改它。任何帮助将不胜感激。item.length
70.8
70.799999999999997
注意:出于一致性原因,我不希望将双精度值保存为json文件中的字符串。
答:
0赞
Suhaib Ahmad
10/2/2023
#1
我设法通过将成员更改为类型来解决这个问题Item
decimal
public class Item
{
public string name {get; set;};
public decimal length {get; set;}
}
评论
double
0.8
4/5
0.110011001100...
.1100
70.8
decimal
double
decimal
decimal
double
(double) start
decimal