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

C# 我应该什么时候使用JSON序列化,为什么?,c#,asp.net,json,jquery,C#,Asp.net,Json,Jquery,对于何时必须使用JSON序列化以及何时不需要(甚至不需要)序列化对象,我有点困惑 我花了几天时间试图使用jQuery.ajax和JSON发送一个简单对象列表。 我有一个名为Product的类: public class Product { public string Name; public string Qnt; public string Price; } 和一个web方法,返回一个充满产品的列表 List<Product> p = new List&l

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

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

public class Product
{
    public string Name;
    public string Qnt;
    public string Price;
}
和一个web方法,返回一个充满产品的列表

List<Product> p = new List<Product>();
…而且它不起作用。。。因为在客户端,我只得到一个长字符串(当我使用$.each时,它将被逐个字符解析)-我知道应该首先解析它

我花了很长时间才意识到,我只需将其作为产品对象列表返回,而无需序列化,客户端就可以获得完美JSON格式的产品列表

编辑
我实际上不明白的是:如果我序列化我的列表,它将返回JSON格式的字符串,在我使用它之前必须对其进行解析。如果我不序列化我的列表,它将返回相同的数据,但作为对象而不是字符串返回,因此我可以立即使用它我如何知道我必须在数据上使用JSON序列化,还是它将始终由框架来完成?

您没有将
列表直接返回给客户端。它不是作为一个
列表
,在HTTP级别没有这样的概念。但是,您使用的服务器端框架正在为您执行JSON序列化。如果您首先执行序列化,那么序列化的字符串将被JSON序列化,包括另一个转义级别等。

我认为您需要首先调用$.parseJSON(msg.d)将JSON字符串转换为JS对象,jQuery迭代将不会有问题。您可能会得到一个类似“yourServiceMethodCallNameResult”的对象,该对象将有一个对象数组(您的产品)。

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

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

服务器端:

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);

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

不要自己格式化HTML。使用jquery.tmpl。Javascript(您编写的代码)应该用于逻辑,而不是用于呈现。这是否意味着当我将数据发送回客户端时,我永远不必进行JSON序列化?那么JavaScriptSerializer是做什么的?此外,我还发现了很多关于在发送数据之前序列化数据的文本…@Goran:
JavaScriptSerializer
可能被框架用于为您序列化数据,在其他您希望能够创建JSON的场景中,这是有意义的。只是在这种情况下,它是为你做的。这就像SOAP调用—您通常不会自己调用
SoapFormatter
…好吧,我意识到
$.parseJSON
将创建字符串以外的对象,但仍然存在一个问题:为什么/何时我可以使用序列化/解析,何时我可以发送对象列表,而asp.net可以为我执行JSON序列化?谢谢阅读本文以了解为什么使用JSON?简单一点。1) 它的通用性和可用于任何平台/语言,就像XML 2)关于XML,它去掉了标记,使其非常小和紧凑。这是一个有趣的文本,但我认为我不够清楚:好的,我想使用JSON从asp.net传输数据。但是我怎么知道它是自动序列化的,还是必须序列化?我已经用这个更新了我的问题。@MohibSheth,谢谢你的解析示例,但我只能选择一个答案。
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];
});