如何使用C#string Builder制作简单的JSON对象

我是JSON的新手,并希望使用StringBuilder创建简单的JSON对象,这将通过jQuery Ajax调用进行查询。

[WebMethod] public static string GetmyJSON() { StringBuilder sb = new StringBuilder(); sb.Append("{firstname: \"Manas\",").Append("lastname : \"Tunga\"").Append("}"); return sb.ToString(); } 

在我的客户端代码中,我有:

 .ajax({ type: "POST", url: "simplePage.aspx/GetmyJSON", data: "{}", contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (data) { alert(data.d.firstname); } // end of sucess }); // End of ajax 

但我的警告信息显示“未定义”而不是“玛纳斯”。 是否可以使用StringBuilder返回JSON对象?

永远不要那样做。 永远不要手动构建JSON。 始终使用JSON序列化程序。 或者在您的情况下,您甚至不需要这样做,因为ASP.NET webmethod运行时会照顾。 您所要做的就是专注于您的业务需求,而不必担心管道问题。

例如,首先定义一个代表您的数据的模型:

 public class Person { public string FirstName { get; set; } public string LastName { get; set; } } 

然后让您的Web方法返回此模型,将所有序列化问题留给框架:

 [WebMethod] public static Person GetPerson() { Person p = new Person(); p.FirstName = "Manas"; p.LastName = "Tunga"; return p; } 

现在只需从客户端使用此方法:

 $.ajax({ type: 'POST', url: 'simplePage.aspx/GetPerson', data: '{ }', contentType: 'application/json; charset=utf-8', success: function (data) { alert(data.d.FirstName); alert(data.d.LastName); } }); 

无需担心JSON,字符串构建器,……

如果需要,您还可以将复杂参数传递给Web方法:

 public class Foo { public string Bar { get; set; } } 

然后:

 [WebMethod] public static Person GetPerson(Foo foo) { ... } 

最后:

 $.ajax({ type: 'POST', url: 'simplePage.aspx/GetPerson', data: JSON.stringify({ foo: { bar: 'baz' } }), contentType: 'application/json; charset=utf-8', success: function (data) { alert(data.d.FirstName); alert(data.d.LastName); } }); 

此处显示的JSON.stringify方法本身内置于现代浏览器中。 如果您需要支持旧版浏览器,可以在页面中包含json2.js脚本。

 var lstMes = new List(); System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); string sJSON = oSerializer.Serialize(lstMes); return sJSON; 

别忘了添加引用:

 System.Web.Extensions.dll !! 

严格回答这个问题 – 是的,你可以从.NET方法返回任何你想要的东西。 正如@canon在对该问题的评论中所说,你的问题可能是你必须包装属性名称。

这说明了为什么“正确”的答案(如前所述: 1,2 )是使用现有的串行器,如JSON.NET (如果你需要手动序列化)或让.NET处理它(就像在大多数“最近”一样)迭代)通过返回对象本身。