[英]Working with JSON on the Server-Side in ASP.NET and C#
我有一个在客户端使用JQuery的ASP.NET Web表单。 我有一个用于构建对象集合并将其存储在JSON中的用户界面。 在完成客户端的实现后,当用户单击按钮时,我现在需要使用该信息。 单击此按钮时,我需要遍历该JSON集合并验证条目。 我的问题是,我不确定该怎么做。
// Client-Side Code
var myCollection = {
"data": [
]
};
// Server-Side Code
protected void myButton_Click(object sender, EventArgs e)
{
// Parse JSON
}
集合中的每个项目都存储在“数据”属性中。 如何在服务器端循环遍历JSON集合? 我曾考虑过将JSON数据放入“隐藏的HTML元素”中,但这听起来并不好,我想出了一个好的方法。
谢谢
如何将其发送到服务器取决于您-隐藏的字段,AJAX调用,无论您喜欢什么。 在服务器上获得字符串后,您将需要两件事:
让我们稍微调整一下示例,因为示例中的“ myCollection”是对象,而不是集合。 因此,我们将其称为myObject。 其次,我们假设“数据”是一个字符串数组。 可以是任何东西,但我们将使其保持简单。
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<T>(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<MyObjectType>(incomingString);
隐藏字段中的JSON是一种有效的方法,因为数据随后将被发布到服务器。 然后,您可以使用System.Web.Script.Serialization.JavaScriptSerializer组件将数据反序列化(到字典中)并以这种方式访问数据。 不能100%确定如何从该过程中获取阵列数据。 还有其他工具(例如JSON.NET)也可以解析JSON。
另一种方法是通过Web服务调用,但这不会贯穿页面生命周期。
HTH。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.