我有一个像这样的简单类:
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的所有私人成员。