Я использую Newtonsoft для десериализации данных из файла.Когда я десериализую два разных экземпляра из двух разных наборов данных, свойство обоих экземпляров в итоге получит одинаковое значение.Я создал небольшой проект, чтобы воспроизвести проблему.Вот мои 2 файла JSON
File1.json:
{
"Name": "File1",
"SomeProperty":
{
"Value": 1
}
}
File2.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;
}
}
Program.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 значение SomeProperty экземпляров fileData1 и FileData2 равно 2, что не соответствует ожидаемому.