我什么时候应该使用JSON序列化?为什么?

时间:2011-11-24 07:07:25

标签: c# asp.net json jquery

我有点困惑于何时必须使用JSON序列化序列化对象以及何时不需要(甚至不必要)。

我花了几天时间尝试使用jQuery.ajax和JSON发送简单对象列表。 我有一个名为Product的课程:

public class Product
{
    public string Name;
    public string Qnt;
    public string Price;
}

以及返回填充了Products

的列表的Web方法
List<Product> p = new List<Product>();

我使用System.Web.Script.Serialization.JavaScriptSerializer在JSON中序列化此列表并将其作为字符串发送到客户端,我使用jQuery格式化它

$.each(msg.d, function (index, Product) {
    $('#details').append('<p>Name: ' + Product.Name 
                           + '<br />Quantity: ' + Product.Qnt 
                           + '<br />Price: ' + Product.Price + '</p>');
});

...它不会起作用...因为在客户端,我只是得到一个长字符串(当我使用$ .each时,它会被逐字符解析) - 我学到了它应该首先解析

我花了很长时间才意识到我必须将其作为产品对象列表返回,没有序列化,和客户端获得完美JSON格式的产品列表!

修改: 我实际上不明白的是:如果我序列化我的列表,它会返回JSON格式化的字符串,在我可以使用之前必须对其进行解析。如果我没有序列化我的列表,它返回相同的数据,但作为一个对象,而不是一个字符串,所以我可以立即使用它。 我怎么知道我是否必须对我的数据使用JSON序列化,或者它总是由框架完成?

4 个答案:

答案 0 :(得分:3)

您没有直接将List<Product>退回给客户。它不会像List<Product>一样通过网络 - 在HTTP级别没有这样的概念。但是,您正在使用的服务器端框架正在为您执行JSON序列化。如果先执行序列化,那么序列化的字符串将被JSON序列化,包括另一级别的转义等。

答案 1 :(得分:1)

我认为您需要首先调用$ .parseJSON(msg.d)将JSON字符串转换为JS对象,jQuery将不会出现任何问题。您最终可能会得到一个像“yourServiceMethodCallNameResult”这样的对象,该对象将包含一系列对象(您的产品)。

答案 2 :(得分:1)

您尚未提及如何查询产品列表。 JavaScriptSerializer的问题在于它返回一个包含在XML标记中的JSON输出,这使得它成为客户端上的XMLObject。您只需获取内部文本内容并使用$ .parseJSON()方法将其转换为客户端上的JSON对象。

查询使用JavaScriptSerializer将产品列表序列化为JSON的WCF服务的示例。

服务器端:

JavaScriptSerializer js = new JavaScriptSerializer();
List<Product> p = new List<Product>()
{
new Product() { Name = "one", Price = "1", Qnt = "1" },
new Product() { Name = "two", Price = "1", Qnt = "1" },
new Product() { Name = "three", Price = "1", Qnt = "1" },
new Product() { Name = "four", Price = "1", Qnt = "1" },
new Product() { Name = "five", Price = "1", Qnt = "1" },
new Product() { Name = "six", Price = "1", Qnt = "1" }
};
return js.Serialize(p);

客户方:

$.get("http://server/service/GetProducts", function (data) {
    var jsonObj = $.parseJSON(data.firstChild.textContent);
    var obj1 = jsonObj[0];
});

答案 3 :(得分:0)

您使用JSON通过网络发送信息。 JSON是一种比XML更有效的数据表示,因为它不那么冗长。通常,您会在服务器上将类或其他内容序列化为JSON,将其发送到客户端,然后客户端将其反序列化为JavaScript。或者从JavaScript中将它从对象或数组序列化为JSON,将其发送到服务器,然后服务器将其反序列化