繁体   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