0

我在 html 中有一个树视图结构。它只会有节点和子节点。它不能有另一个子级别。此树视图的特点之一是用户可以重新排列节点和子节点。

当用户保存它时,我会让它向我的 c# 页面发送一个 JSON 对象,并在服务器中读取新订单并保存它。顺序由 JSON 对象中对象的顺序决定。

我想象 JSON 对象将如下所示(示例):

[ {id: 4, items: [5, 6, 7]}, {id: 8, items: [9, 10, 11, 12, ...]}, ... ]

所以这将是一个字典数组。对于每个字典,它将有两个键,一个id是节点的 ID 号,items一个是子节点 ID 的数组。

重要的是顺序与我添加到数组的顺序相同,这样当我遍历它们时,插入它们时它仍然是相同的顺序。如果它像一本字典,那么这将不是真的。

我很确定我可以使用 jquery 创建这个字典数组。但是我怎样才能把它变成一个 JSON 对象呢?这可能吗?

在 c# 中,我怎么能读到这个?

4

3 回答 3

3

_真的看不出问题。如果您使用的是 jQuery,那么您使用的是 Javascript。JSON 对象Javascript 对象,因此以下内容在 jQuery 中有效。它将对象序列化为字符串。

var data = [ {id: 4, items: [5, 6, 7]}, {id: 8, items: [9, 10, 11, 12, ...]}, ... ];
$.post({ 
     data: data,
     // ...
}); 

如果您需要字符串, JSON.Stringify() 会将对象转换为字符串。(我没有意识到它是 Javascript 原生的)。自从我一直使用 jQuery ajax 以来,从来没有过。

于 2013-06-27T00:34:50.163 回答
1

在 C# 中解析这些数据的一种简单方法是使用 JSON.Net 等库。您可以解析一个 json 字符串并遍历它,而不必将这个 JSON 结构实际镜像到实际的 C# 类中,但是这对于大量的 Json 会很有帮助。

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

static void Main(string[] args)
{
    string json = "{ items: [ {id: 4, items: [5, 6, 7]}, 
          {id: 8, items: [9, 10, 11, 12]}, {id: 5, items: [9, 10, 11, 12]} ] }";

    JToken root = JToken.Parse(json);
    JToken items = root["items"];

    var results = from element in items
                  select new
                  {
                     Id = element["id"].Value<int>(),
                     Items = element["items"].Select(x => x.Value<int>())
                  };

    foreach (var r in results)
    {
        Console.WriteLine("Id: {0}, Items: {1}", r.Id, string.Join(", ", r.Items));
    }
}

打印到控制台:

Id: 4, Items: 5, 6, 7
Id: 8, Items: 9, 10, 11, 12
Id: 5, Items: 9, 10, 11, 12

我喜欢使用的另一个方便的实用程序是Json2C#,它给了我一个基础。但是我提供的示例向您展示了在发送 HTTP Post 请求后检索数据的轻量级、快速方法。

于 2013-06-27T01:12:47.123 回答
1

命名空间

System.Web.Script.Serialization;

问题 1

但是我怎样才能把它变成一个 JSON 对象呢?这可能吗?

回答

JavaScriptSerializer jss = new JavaScriptSerializer();
var jsonObjList = jss .Serialize(objList);

问题2

在 c# 中,我怎么能读到这个?

回答

模型

public class Object1
{
  public int id {get; set;}
  public List<int> items {get; set;}
}

逻辑

string jsonData = @"[ {id: 4, items: [5, 6, 7]}, {id: 8, items: [9, 10, 11, 12, ...]}, ... ]";

JavaScriptSerializer jss = new JavaScriptSerializer();
var objList = jss.Deserialize<List<Object1 >>(jsonData);
于 2013-06-27T03:23:27.427 回答