如何在c#中访问字符串化数组的元素

本文关键字:数组 元素 字符串 访问 | 更新日期: 2023-09-27 18:11:01

我是一个编程新手,所以请原谅我。

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

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

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

下面是我的代码:
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});

});
  • 警告变量jsonText我收到以下内容:

    {"noteData":[{"noteText":"这是笔记文本";"topCoord":23.33;"leftCoord":12.23},{"noteText":"Note text 2";"topCoord":23.33;"leftCoord":12.23}]}

  • 问题:

    这太棒了!但是我如何在c#的web方法中'解码'这些数据,以便我可以访问每个数据块,最终为每个notes '对象'写一个记录到SQL数据库。

    我希望这有意义。

    如何在c#中访问字符串化数组的元素

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

    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);
    

    一种选择是在web服务中使用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/

    找到

    参数将以字典数组的形式到达您的方法。为您的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服务,请查看这篇来自Encosia的有用文章,了解一些关于如何使用jQuery调用web服务的一般信息。