2013-06-27 57 views
0

我在html中有一個treeview結構。它只會有節點和子節點。它不能有另一個分層次。此樹視圖的一個功能是用戶可以重新排列節點和子節點。如何在jQuery中創建JSON字典數組?

當用戶保存它時,我會讓它發送一個JSON對象到我的c#頁面,並在服務器中它將讀取新的順序並保存它。順序由JSON對象中的對象的順序決定。

I畫面JSON對象將看起來像這樣(舉例):

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

因此,這將是字典的陣列。對於每個詞典,它將有兩個鍵,id將是該節點的ID號,並且items將是子節點的ID的數組。

重要的是,順序與我添加到數組中的順序相同,這樣當我遍歷它們時,它在插入它們時仍然以相同的順序排列。如果它像一本字典那麼這不會是真的。

我很確定我可以使用jquery創建這個字典數組。但是我怎麼能把它變成一個JSON對象?這可能嗎?

而在C#中,我將如何能夠閱讀此?

+0

你可能有興趣來查找DefaultModelBinder爲C#與JSON,爲了發送一個郵寄回一個使用JSON數據填充C#類的Controller,但我已經爲您提供了一個簡單的解決方案來幫助您開始。 –

回答

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以來從未有過。

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請求後檢索數據。

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

我將如何遍歷所有值? – omega

+0

@omega你可以使用** foreach **像這樣'foreach(objList objList)' – Olrac

+0

順便說一下,ASP.NET是一個開發框架嗎? – Olrac