我正在使用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
)?有嚴格的反序列化方法嗎?
在此先感謝
它工作得很好,即使我改變JsonConstructor的修飾符私人。 Newtonsoft以某種方式仍然創建這個對象。 – serdar