我有以下類:JsonSerializer.CreateDefault()填充(..)重置我的價值觀
public class MainClass
{
public static MainClass[] array = new MainClass[1]
{
new MainClass
{
subClass = new SubClass[2]
{
new SubClass
{
variable1 = "my value"
},
new SubClass
{
variable1 = "my value"
}
}
}
};
public SubClass[] subClass;
[DataContract]
public class SubClass
{
public string variable1 = "default value";
[DataMember] // because only variable2 should be saved in json
public string variable2 = "default value";
}
}
我保存如下:
File.WriteAllText("data.txt", JsonConvert.SerializeObject(new
{
MainClass.array
}, new JsonSerializerSettings { Formatting = Formatting.Indented }));
的data.txt:
{
"array": [
{
"subClass": [
{
"variable2": "value from json"
},
{
"variable2": "value from json"
}
]
}
]
}
然後我反序列化並填充我的對象,如下所示:
JObject json = JObject.Parse(File.ReadAllText("data.txt"));
if (json["array"] != null)
{
for (int i = 0, len = json["array"].Count(); i < len; i++)
{
using (var sr = json["array"][i].CreateReader())
{
JsonSerializer.CreateDefault().Populate(sr, MainClass.array[i]);
}
}
}
然而,當我打印以下變量:
Console.WriteLine(MainClass.array[0].subClass[0].variable1);
Console.WriteLine(MainClass.array[0].subClass[0].variable2);
Console.WriteLine(MainClass.array[0].subClass[1].variable1);
Console.WriteLine(MainClass.array[0].subClass[1].variable2);
那麼它的輸出是:
default value
value from json
default value
value from json
但
而不是「默認值」應該有「我的價值」,因爲那是什麼我在創建類的實例時使用了JsonSerializer,應該只使用來自json的值填充對象。如何正確填充整個對象,而不重置其未包含在json中的屬性?
感謝您的解釋。我擔心Populate()將無法合併當前和現有的數組,但其名稱和文檔混淆了我。最後,我通過添加或分配每個數組成員的屬性與來自json的值來做到這一點。你的函數可能不太容易在我的真實代碼中工作,因爲我有一個具有各種屬性和其他數組的類的數組。 – LukAss741