[英]C# Constructor from deserialized json?
我有一個代表json api的類。 我創建了一個構造函數,該構造函數使用交換式枚舉選擇對象的填充方式。 一種是用於最小等效的json對象。 另一個旨在通過從文件中讀取來填充屬性。 因此,我可以將文件讀取為字符串並反序列化,但是接下來如何填充屬性?
// this code is in the constructor
string text = System.IO.File.ReadAllText(fileName);
this.???? = JsonConvert.DeserializeObject<MyObject>(text); // MyObject is the object the constructor is working on
我可以將反序列化的文本投射到對象的屬性中嗎?
很抱歉問到一些可能已經被問到的問題,但是我不知道我是否問了正確的問題(更不用說搜索了)。 謝謝...
未經測試,但我認為您可以執行以下操作:
public MyObject(MyEnum e)
{
switch(e)
{
case MyEnum.ValueThatMeansWeDeserializeFromJSON:
string text = System.IO.File.ReadAllText(fileName);
var serializer = new JsonSerializer();
serializer.Populate(new JsonTextReader(new StringReader(text)), this);
break;
}
}
填充將使用現有對象,並嘗試將JSON中的屬性反序列化到該對象中(與DeserializeObject
相反,后者將創建一個新對象。
正如我在評論中提到的那樣,請使用工廠而不是構造函數中的開關。 如果要將其保留在構造函數中,請使用automaper並執行此操作
public class MyObject
{
public MyObject()
{
}
public MyObject(Enum e)
{
string text = System.IO.File.ReadAllText(fileName);
var source = JsonConvert.DeserializeObject<MyObject>(text);
Mapper.CreateMap<MyObject, MyObject>();
Mapper.Map(source, this);
}
public string Name { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.