在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调用,无论你喜欢什么。 一旦你在服务器上获得了字符串,你将需要两件事:
- 该对象的AC#服务器端表示
- 转换器从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。
- System.Collections.Generic.List ‘不包含’equals’的定义
- 如何获取DataSet.ReadXml以将DateTime属性解析为类型化DateTime
- 命名空间在.net中可以拥有的类数是否有限制?
- 如何在Asp.net Gridview列中为Checkbox添加事件
- 组合DataTextField中的两个字段。 这可能吗?
- 发布错误:无法加载文件或程序集“Microsoft.Web.XmlTransform”,Version = 1.4.0.0,Culture = neutral等等或其依赖项之一
- IRequiresSessionState – 我该如何使用它?
- 如何在ASP .NET BoundField(DataFormatString)中修复日期格式?
- ASP.NET站点中静态变量的范围