在该类的构造函数中实例化类变量



我有一个像这样的简单类:

public class MyClass
{
        public string String1;
        public string String2;
        public MyClass()
        {
        }
        public MyClass(string Json)
        {
        }
}

如果类是没有参数的实例化的,则它将带回一个空的对象。但是,当我将JSON字符串传递给构造函数时,我想将所有属性设置为JSON中的所有属性。<<<<<<<<<<<<<<<</p>

我使用纽顿斯托夫(Newtonsoft

string JsonArray = Base64.Decode(HttpContext.Current.Request.QueryString["songinfo"]);
MyClass tmp = JsonConvert.DeserializeObject<MyClass>(JsonArray);
MyClass InstantiatedClass = tmp;

IntantiatedClass现在是一个填充的对象。但是,我想在构造函数本身中实现这一目标,但是我无法找到一种方法。

我已经尝试了设置this = JsonConvert.DeserializeObject<MyClass>(Json)之类的事情,但是当然,this是只读的。

我知道我可以通过解析JSON并设置每个变量等于其适当的JSON属性值来做到这一点,但是我想这样做,因为它更干净。

您无法从构造函数中做到这一点。您可以考虑MyClass中的一种工厂方法:

public static MyClass Deserialize(string json)
{
    return JsonConvert.DeserializeObject<MyClass>(json);
}

构造函数不返回任何内容,正如您所述的this是只读的。因此,如果没有(如您所述)手动解析JSON并初始化该实例中的不同变量的情况。

工厂方法可能是您要寻找的。

您可以这样做:

public class MyClass
{
    public string String1;
    public string String2;
    public MyClass()
    {
    }
    public static MyClass Instance(string json)
    {
        return new JsonConvert.DeserializeObject<MyClass>(json);
    }
}

,但这只是您想要实现的一种解决方法。实际上,没有可能直接通过构造函数执行此操作。

public MyClass(string Json)
{
    MyClass tmp = (MyClass) JsonConvert.DeserializeObject<MyClass>(Json);
    this.String1 = tmp.String1;
    this.String2 = tmp.String2;
}

注意,您可以访问myclass方法中的MyClass的所有私人成员。

最新更新