2013-06-27 6 views
0

У меня есть структура treeview в html. Он будет иметь только узлы и подузлы. У него не может быть другого подуровня. Одной из особенностей этого дерева является то, что пользователи могут переупорядочивать узлы и подузлы.Как создать массив JSON словарей в jquery?

Когда пользователь сохранит его, я отправлю объект JSON на мою страницу C#, а на сервере он прочитает новый заказ и сохранит его. Порядок определяется порядком объектов в объекте JSON.

Я изображаю объект JSON будет выглядеть следующим образом (пример):

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

Так было бы массив словарей. Для каждого словаря он будет иметь два ключа, id будет номером идентификатора узла, а items будет массивом идентификаторов подузлов.

Важно, чтобы порядок был таким же, как и порядок, который я добавляю в массив, так что, когда я повторяю их, его все еще в том же порядке, когда я их вставил. Если это похоже на словарь, тогда это не будет правдой.

Я уверен, что могу создать этот массив словарей, используя jquery. Но как я могу превратить это в объект JSON? Это возможно?

И в C#, как бы я мог это прочитать?

+0

Вы можете быть заинтересованы, чтобы посмотреть вверх DefaultModelBinder для C# с помощью JSON, для того, чтобы отправить a Сообщение назад контроллер, который заполняет ваш класс C# данными JSON, но я предоставил вам простое решение для начала работы. –

ответ

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-сообщения.

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

Logic

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 (var obj in objList)' – Olrac

+0

Кстати, какой ASP.NET является основой разработки, вы использовали? – Olrac