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

时间:2012-05-10 11:50:43

标签: jquery asp.net 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

但我的警告信息显示'undefined'而不是'Manas'。 是否可以使用StringBuilder返回JSON对象?

3 个答案:

答案 0 :(得分:10)

从不这样做。 从不手动构建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脚本。

答案 1 :(得分:3)

var lstMes = new List<Person>();

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

不要忘记添加对:

的引用
System.Web.Extensions.dll !!

答案 2 :(得分:0)

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

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