我有一个在客户端使用 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 调用,随您喜欢。在服务器上获得字符串后,您需要做两件事:
- C# 服务器端表示 那个对象的
- 一个转换器去 从 JSON 到 C# 表示。
让我们稍微调整一下您的示例,因为示例中的“myCollection”是一个对象,而不是一个集合。所以我们将其称为 myObject。其次,我们假设“数据”是一个字符串数组。它可以是任何东西,但我们会保持简单。
var myObject = {
data: ["string1","string2"]
};
我们还假设您使用的是 DataContractJsonSerializer,因此您可以轻松映射两种不同的大小写样式...JavaScript 通常是驼峰式大小写,而 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);
关于c# - 在 ASP.NET 和 C# 中的服务器端使用 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4367022/