在ASP.NET和C#中使用服务器端的JSON

我有一个在客户端使用JQuery的ASP.NET Web表单。 我有一个用户界面,它构建一个对象集合并将它们存储在JSON中。 完成客户端实现后,我需要在用户单击按钮时处理该信息。 单击此按钮时,我需要遍历该JSON集合并validation条目。 我的问题是,我不知道该怎么做。

// Client-Side Code var myCollection = { "data": [ ] }; // Server-Side Code protected void myButton_Click(object sender, EventArgs e) { // Parse JSON } 

集合中的每个项目都存储在“data”属性中。 如何在服务器端循环访问JSON集合? 我想过将JSON数据放在隐藏的HTML元素中,但这听起来不太好,我想到了一个很好的方法。

谢谢

你如何将它发送到服务器取决于你 – 一个隐藏的领域,一个AJAX调用,无论你喜欢什么。 一旦你在服务器上获得了字符串,你将需要两件事:

  1. 该对象的AC#服务器端表示
  2. 转换器从JSON转到C#表示。

让我们稍微调整一下你的例子,因为你的例子中的“myCollection”是一个对象,而不是一个集合。 所以我们称之为myObject。 其次,我们假设“data”是一个字符串数组。 它可能是任何东西,但我们会保持简单。

 var myObject = { data: ["string1","string2"] }; 

我们还假设您正在使用DataContractJsonSerializer,因此您可以轻松映射两种不同的案例样式…… JavaScript通常是camelCase,而C#通常是ProperCase。 所以,在C#中,这将是:

 [DataContract(Name="myObjectType")] public class MyObjectType{ [DataMember(Name="data")] public string[] Data { get; set; } } 

现在你有两个相同结构的表示,一个在c#中,一个在JavaScript中。 要从一个转换为另一个,我们可以使用内置的DataContractJsonSerializer,如下所示:

 public static T Deserialize(string json) { using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); return (T)serializer.ReadObject(ms); } } 

…导致最后的呼叫:

 MyObjectType myObject = Deserialize(incomingString); 

隐藏字段中的JSON是一种有效的方法,因为数据将被发布到服务器。 然后,您可以使用System.Web.Script.Serialization.JavaScriptSerializer组件对数据进行反序列化(到字典)并以这种方式访问​​数据。 不是100%肯定hhow数组数据来自该过程。 这也是JSON.NET等其他工具来解析JSON。

另一种方法是通过Web服务调用,但不会通过页面生命周期。

HTH。