返回空的Json对象

我试图在C#中返回一个Json对象。 我是MVC控制器的新手并且第一次使用Json,我返回这个对象,它是空的。

public class A { private string name; public void set(string data) { name = data; } public string get() { return name; } } public JsonResult Hello() { A obj = new A(); obj.set("Abc"); JavaScriptSerializer js = new JavaScriptSerializer(); string jsonVar = js.Serialize(obj); return Json(jsonVar, JsonRequestBehavior.AllowGet); } 

你假设框架可以推断出getset设置私有变量name的值..它没有。

相反,将name设为公共属性,它应该工作:

 public class A { public string Name { get; set; } } A obj = new A() { Name = "Abc" }; /* ...etc... */ 

从框架的角度考虑这个问题。 它如何确定getset正在做什么? 他们是否访问相同的变量? 谁知道..毕竟它的运行时间。 这就是为什么方法无法按照您的假设进行序列化的原因。

在C#中,我们可以自动创建(在C#3+中)的属性。

 public class A { public string Name { get; set; } } 

其次,您需要返回包装在新对象中的对象,以便JSON正确返回。 您不需要自己序列化对象(因为您可以将其作为ActionResult返回)。

 public JsonResult Hello() { A obj = new A(); obj.Name = "Abc"; return Json(new { obj }, JsonRequestBehavior.AllowGet); } 

这将创建一个新的Json对象{"obj":{"Name":"Abc"}}

你不应该命名方法GetSet – 甚至不是GetNameSetName ,因为如果我记得我的C#读数正确,CLR按照惯例将“属性”转换为CIL代码(getter成为“get”方法,并且setter成为“set”方法)。 “正确”的方式是使用具有有意义名称的属性 – 您将在以后感谢自己:

 private string _name; public string Name { get { return _name; } set { _name=value; } }