Могу ли я сделать строгую десериализацию с Newtonsoft.В JSON?
я использую Newtonsoft.JSON для сериализации/десериализации объектов.
Насколько я знаю десериализации не может быть успешной, если класс не имеет конструктора без параметров. Пример,
public class Dog
{
public string Name;
public Dog(string n)
{
Name = n;
}
}
для этого класса ниже код генерирует объект правильно.
Dog dog1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{"Name":"Dog1"}");
для меня, удивительно, он генерирует объект правильно с кодами ниже также.
Dog dog2 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{"name":"Dog2"}");
Dog dog3 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{"n":"Dog3"}");
Dog dog4 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{"N":"Dog4"}");
теперь все, что я могу думать, это
- конвертер Json игнорирование чувствительности к регистру при рефлексии.
- более того, если он сталкивается с конструктором, он заполняет параметры строкой json(как будто имена параметров находятся в строке json). Я не уверен, но, возможно, именно поэтому они называют это гибким.
вот мой вопрос:
если мой класс-это что-то вроде этого,
public class Dog
{
public string Name;
public Dog(string name)
{
Name = name + "aaa";
}
}
и создание объекта с
Dog dog1 = Newtonsoft.Json.JsonConvert.DeserializeObject<Dog>("{"Name":"Dog1"}");
затем созданный объект дает мне dog1.Name = "Dog1aaa"
вместо dog1.Name = "Dog1"
. Как я могу десериализовать объект правильно(возможно, переопределение Name
после создания объекта)? Есть ли способ строгой десериализации?
спасибо заранее
2 ответов
Как правильно десериализовать объект (возможно, переопределить имя после создания объекта)? Есть ли способ строгой десериализации?
вы можете объявить другой конструктор и force Json.Net использовать его
public class Dog
{
public string Name;
[JsonConstructor]
public Dog()
{
}
public Dog(string name)
{
Name = name + "aaa";
}
}