我应该何时使用JSON序列化,为什么?
我有点困惑,我何时必须使用JSON序列化序列化对象,何时不需要(甚至是不必要的)。
我花了几天的时间尝试使用jQuery.ajax和JSON发送简单对象列表。 我有一个名为Product的类:
public class Product
{
public string Name;
public string Qnt;
public string Price;
}
以及一个返回填充产品列表的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时,它将被逐个字符地分析) - 我知道它应该先被解析
花了很长时间才意识到,我只需将它作为Product对象列表返回,而不需要序列化, 并且客户端以完美的JSON格式获取产品列表!
编辑 :我实际上不明白:如果我序列化我的列表,它会返回JSON格式的字符串,必须先解析才能使用它。 如果我不序列化我的列表,它将返回相同的数据,但作为对象,不是字符串,因此我可以立即使用它。 我怎么能知道我必须在我的数据上使用JSON序列化,还是始终由框架完成 ?
您不直接将您的List<Product>
返回给客户端。 它不会像List<Product>
- 在HTTP级别上没有这样的概念。 但是,您正在使用的服务器端框架正在为您执行JSON序列化。 如果您先执行序列化,那么序列化的字符串将被JSON序列化,包括另一级别的转义等。
我想你需要先调用$ .parseJSON(msg.d)将JSON字符串转换为JS对象,那jQuery将没有问题迭代。 你可能最终会得到一个像“yourServiceMethodCallNameResult”这样的对象,并且该对象将有一个对象(您的产品)的数组。
您尚未提及您如何查询产品列表。 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];
});
链接地址: http://www.djcxy.com/p/47837.html