我有一个简单的类:
public class MyClass
{
public string String1;
public string String2;
public MyClass()
{
}
public MyClass(string Json)
{
}
}
如果在没有参数的情况下实例化类,它只会返回一个空对象。但是,当我将一个JSON字符串传递给构造函数时,我想将所有属性设置为等于它们在JSON中的值。 / p>
我已经使用Newtonsoft的JSON.NET在课外完成了这个,如下所示:
string JsonArray = Base64.Decode(HttpContext.Current.Request.QueryString["songinfo"]);
MyClass tmp = JsonConvert.DeserializeObject<MyClass>(JsonArray);
MyClass InstantiatedClass = tmp;
InstantiatedClass现在是一个完全填充的对象..但是,我想在构造函数本身内实现这一点,但我无法找到一种方法来实现它。
我尝试过设置this = JsonConvert.DeserializeObject<MyClass>(Json)
之类的内容,当然,this
是只读的。
我知道我可以通过解析Json并将每个变量设置为相应的JSON属性值来实现,但我想这样做,因为它更干净。
答案 0 :(得分:4)
您无法从构造函数中执行此操作。您可以在MyClass
中考虑工厂方法,如下所示:
public static MyClass Deserialize(string json)
{
return JsonConvert.DeserializeObject<MyClass>(json);
}
构造函数不返回任何内容,正如您所说this
是只读的。因此,如果没有(如你所说)手动解析JSON并初始化该实例中的不同变量,那么在构造函数中执行它是不可能的。
工厂方法可能就是你要找的。 p>
答案 1 :(得分:3)
你可以这样做:
public class MyClass
{
public string String1;
public string String2;
public MyClass()
{
}
public static MyClass Instance(string json)
{
return new JsonConvert.DeserializeObject<MyClass>(json);
}
}
但这只是你想要实现的某种解决方法。事实上,没有可能通过构造函数直接执行此操作。
答案 2 :(得分:0)
public MyClass(string Json)
{
MyClass tmp = (MyClass) JsonConvert.DeserializeObject<MyClass>(Json);
this.String1 = tmp.String1;
this.String2 = tmp.String2;
}
注意,您可以访问MyClass方法中MyClass的所有私有成员。