繁体   English   中英

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

[英]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调用,无论您喜欢什么。 在服务器上获得字符串后,您将需要两件事:

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

让我们稍微调整一下示例,因为示例中的“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM