【发布时间】:2014-01-27 22:13:26
【问题描述】:
我有一个像这样的简单类:
public class MyClass
{
public string String1;
public string String2;
public MyClass()
{
}
public MyClass(string Json)
{
}
}
如果类在没有参数的情况下实例化,它只会带回一个空对象。但是,当我将 JSON 字符串传递给构造函数时,我想将所有属性设置为等于它们在 JSON 中的值。
我在课堂外使用 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 属性值来做到这一点,但我想这样做,因为它更干净。
【问题讨论】:
-
当然,如果
MyClass是struct,那么您使用this = JsonConvert.DeserializeObject<MyClass>(Json);的方法会奏效。 -
唯一的方法是在构造函数中创建第二个实例,然后使用反射克隆所有属性。与您所要求的相比,答案中提到的静态工厂方法是下一个最好的方法,甚至是更好/更清洁的解决方案。
-
我没有你的问题的答案,你似乎已经有了一些答案,但我想更正你的术语。您不会“实例化变量”。您可以通过创建该类型的对象来实例化一个类型。您要做的是使用作为类型实例化的对象“初始化”这些变量。
标签: c# asp.net json class self-reference