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

时间:2011-10-12 21:16:05

标签: c# jquery json

我是编程的新手,所以请耐心等待。

背景

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

  2. 我成功地将一个文本框的数据传递给了Web服务方法,并将一条记录插入到SQL数据库中(我不会详细讨论这个问题!)。

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

  4. 这是我的代码:

    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}]}

    2. 问题:

      1. 太好了!但是如何在C#中的Web方法中“解码”这些数据,这样我就可以访问每一段数据,最终将记录写入每个Note“对象”的SQL数据库。
      2. 我希望这是有道理的。 提前谢谢。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

下载

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

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

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

可以在http://james.newtonking.com/projects/json/help/

找到Json.net库的文档

答案 2 :(得分:0)

该参数将作为字典数组到达您的方法。为您的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中的数据导入您的网络服务,请查看this useful article from Encosia以获取有关如何利用jQuery使用此信息调用您的网络服务的一般信息。