【问题标题】:How to access the elements of a stringified array in C#如何在 C# 中访问字符串化数组的元素
【发布时间】:2011-10-12 21:16:04
【问题描述】:

我是编程新手,请多多包涵。

背景

  1. 我创建了一个 jQuery 函数,它为我的页面上的各种文本框获取文本、顶部和左侧坐标,我希望使用 AJAX POST 将所有这些信息传递给用 C# 编写的 Web 服务。

  2. 我已经成功地将一个文本框的数据传递给 Web 服务方法,并将一条记录插入到 SQL 数据库中(我不知道这花了我多长时间!)。

  3. 为了为多个文本框写入数据,我使用了一个包含对象数组的 jQuery 函数,我从以下帖子中的 第一个选项 中获得了灵感: Jquery multidimensional arrays

这是我的代码:

function Note(noteText, topCoord, leftCoord) {
    return {
        noteText: noteText,
        topCoord: topCoord,
        leftCoord: leftCoord
    }

var noteData = [];

function SaveNote() {
{'input').filter("notes").each(function(index) {
var noteText = ($this)).val();
var coord = ($this)).offset();
var topCoord = coord.top;
var leftCoord = coord.left;

noteData.push(Note(noteText,topCoord,leftCoord));

var jsonText = JSON.stringify({ noteData : noteData});


});
  1. 警报变量 jsonText 我收到以下信息:

    {"noteData":[{"noteText":"这是注释文本"; "topCoord":23.33 ; "leftCoord":12.23}, {"noteText":"注释文本 2"; "topCoord":23.33 ; "leftCoord":12.23}]}

问题:

  1. 这太棒了!但是如何在 C# 的 web 方法中“解码”这些数据,以便我可以访问每条数据,最终将记录写入每个 Note“对象”的 SQL 数据库。

我希望这是有道理的。 提前谢谢你。

【问题讨论】:

标签: c# jquery json


【解决方案1】:

创建一个可以反序列化的类:

public class Note()
{
    public string noteText { get; set; }
    public float topCoord { get; set; }
    public float leftCoord { get; set; }
}

然后使用 JavaScriptSerializer 反序列化它:

var jsSer = new JavaScriptSerializer();
Note note = jsSer.Deserialize(json);

【讨论】:

  • 非常感谢您的快速回复。这个周末我去看看。
  • 尤里卡!我想我有。我很快就会发布工作解决方案......唷,感觉很好。
【解决方案2】:

一种选择是在您的网络服务中使用 Json.net 库。它是一个开源库,可以从http://json.codeplex.com/下载

使用该库,您只需一行代码即可将 Json 字符串转换为 Xml:

 XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(json);

一旦您将其作为 XML,保存到数据库中应该很容易。 或者,如果您愿意,可以创建一个 .net 对象来表示 Json 数据,并使用库中的 JsonSerializer 类将 Json 文本反序列化为 .net 对象。

Json.net 库的文档可以在http://james.newtonking.com/projects/json/help/找到

【讨论】:

  • 为您的快速回复干杯。这个周末我会去看看,让你知道我过得怎么样。
  • 谢谢 Rajeev,我想我有它,你的帖子肯定对 json 文档有帮助。
【解决方案3】:

参数将作为字典数组到达您的方法。为您的 WebMethod 使用以下原型(如果这是在 Web 服务而不是页面方法中,请删除 static 标识符):

[WebMethod]
public static void MyMethod(Dictionary<string, object>[] noteData)

从这里,您可以遍历每个数组成员并根据需要访问元素:

foreach (Dictionary<string, object> note in noteData) {
    DataObject myDataObject = new DataObject();

    myDataObject.noteText = note["noteText"];
    ...
}

如果您不习惯将数据从 JavaScript 获取到 Web 服务中,请查看 this useful article from Encosia 了解有关如何利用 jQuery 调用您的 Web 服务的一般信息。

【讨论】:

  • 感谢您的快速回复和参考,我会告诉您我的进展情况!
  • ...仍在努力!我意识到在我再次解决这个问题之前,我需要回到 C# 的基础。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
相关资源
最近更新 更多