将 .NET 对象序列化为 JSON:`double` 属性值被写入为带有额外小数位的不同值

问题描述 投票:0回答:1

我正在使用

System.Text.Json
在 .NET Well 类对象和 JSON 之间进行(反)序列化。 Well 类对象有一个层列表
List<Layer> layers
,Layer 类有一个项目列表
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;}
}

例如,当

item.length
值为
70.8
时,在序列化 Well 后,它将作为
70.799999999999997
写入文件。据我所知,如果我错了,请纠正我,这是由于双精度数据类型的精度,但我不明白为什么双精度值的写法不同。类实例具有正确的值,但将其序列化为 json 文件会在文件中更改它。任何帮助将不胜感激。

注意:出于一致性原因,我不希望将双精度值作为字符串保存在 json 文件中。

.net serialization double precision system.text.json
1个回答
0
投票

我设法通过将

Item
成员更改为
decimal
类型

来解决此问题
public class Item
{
    public string name {get; set;};
    public decimal length {get; set;}
}
© www.soinside.com 2019 - 2024. All rights reserved.