簡體   English   中英

反序列化json的C#構造函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM