【发布时间】:2018-10-16 13:58:18
【问题描述】:
我正在使用 Newtonsoft 反序列化文件中的数据。当我从两组不同的数据中反序列化两个不同的实例时,两个实例的属性最终都具有相同的值。我创建了一个小项目来重现这个问题。这是我的 2 个 JSON 文件
文件1.json:
{
"Name": "File1",
"SomeProperty":
{
"Value": 1
}
}
文件2.json:
{
"Name": "File2",
"SomeProperty":
{
"Value": 2
}
}
SomeProperty.cs
namespace Json
{
public class SomePropertyDto
{
public static SomePropertyDto Default = new SomePropertyDto
{
Value = 0
};
public int Value { get; set; }
}
}
FileDataDto.cs
namespace Json
{
public class FileDataDto
{
public string Name { get; set; }
public SomePropertyDto SomeProperty
{
get => someProperty;
set => someProperty = value;
}
private SomePropertyDto someProperty = SomePropertyDto.Default;
}
}
程序.cs
using System.IO;
using Newtonsoft.Json;
namespace Json
{
class Program
{
static void Main(string[] args)
{
string json1 = File.ReadAllText("File1.json");
string json2 = File.ReadAllText("File2.json");
FileDataDto fileData1 = JsonConvert.DeserializeObject<FileDataDto>(json1);
FileDataDto fileData2 = JsonConvert.DeserializeObject<FileDataDto>(json2);
}
}
}
在反序列化两个 FileDataDto 实例后,它们的 SomeProperty 值都相同。但是,如果我不将 FileDataDto someProperty 字段初始化为 SomePropertyDto.Default,
private SomePropertyDto someProperty;// = SomePropertyDto.Default;
它工作正常。如果我将初始化包含在默认值中
private SomePropertyDto someProperty = SomePropertyDto.Default;
在反序列化 fileData1 后,SomeProperty 的值如预期的那样等于 1。但是,在反序列化 fileData2 后,fileData1 和 FileData2 实例的 SomeProperty 值都等于 2,这不是预期的。
【问题讨论】:
标签: json json.net deserialization