2013-02-13 4 views
0

Категория Таблица:генерировать структуру древовидной структуры дерева данных json?

ID => Int, первичный ключ

CategoryName => VARCHAR

ParentCategoryID => Int, обнуляемым

Сформировать следующий формат JSON данных:

[{ 
    "id":1, 
    "name":"Root", 
    "Edit":"<a href='Edit/id'>edit.png</a>", 
    "Delete":"<a href='Delete/id'>delete.png</a>", 
    "children":[{ 
     "id":2, 
     "name":"Horoscope", 
     "Edit":"<a href='Edit/id'>edit.png</a>", 
     "Delete":"<a href='Delete/id'>delete.png</a>", 
     "children":[{ 
      "id":21, 
      "name":"Daily", 
      "Edit":"<a href='Edit/id'>edit.png</a>", 
      "Delete":"<a href='Delete/id'>delete.png</a>", 
      "children":[{ 
       "id":211, 
       "name":"Aries",    
       "Edit":"<a href='Edit/id'>edit.png</a>", 
       "Delete":"<a href='Delete/id'>delete.png</a>" 
      },{ 
       "id":212, 
       "name":"Taurus",     
       "Edit":"<a href='Edit/id'>edit.png</a>", 
       "Delete":"<a href='Delete/id'>delete.png</a>" 
      }] 
     },{ 
      "id":22, 
      "name":"Weekly",    
      "Edit":"<a href='Edit/id'>edit.png</a>", 
      "Delete":"<a href='Delete/id'>delete.png</a>", 
      "children":[{ 
       "id":221, 
       "name":"Gemini",     
       "Edit":"<a href='Edit/id'>edit.png</a>", 
       "Delete":"<a href='Delete/id'>delete.png</a>" 
      },{ 
       "id":222, 
       "name":"Aries",    
       "Edit":"<a href='Edit/id'>edit.png</a>", 
       "Delete":"<a href='Delete/id'>delete.png</a>" 
      },{ 
       "id":223, 
       "name":"Taurus",    
       "Edit":"<a href='Edit/id'>edit.png</a>", 
       "Delete":"<a href='Delete/id'>delete.png</a>" 
      }] 
     }] 
    },{ 
     "id":3, 
     "name":"News",  
     "Edit":"<a href='Edit/id'>edit.png</a>", 
     "Delete":"<a href='Delete/id'>delete.png</a>", 
     "children":[{ 
      "id":31, 
      "name":"Sports",    
      "Edit":"<a href='Edit/id'>edit.png</a>", 
      "Delete":"<a href='Delete/id'>delete.png</a>" 
     },{ 
      "id":32, 
      "name":"Interantional",   
      "Edit":"<a href='Edit/id'>edit.png</a>", 
      "Delete":"<a href='Delete/id'>delete.png</a>" 
     },{ 
      "id":33, 
      "name":"Entertaintment",    
      "Edit":"<a href='Edit/id'>edit.png</a>", 
      "Delete":"<a href='Delete/id'>delete.png</a>" 
     }] 
    }] 
}] 

У меня есть JQuery TreeGrid плагины, которые нуждаются в более высоком формате json. Как я могу генерировать выше json данные из таблицы категорий базы данных и возвращать json-данные в действие контроллера. Я использую структуру сущности для модели.

ответ

0

Я думаю, что вы должны иметь свойство с именем «Детей» в классе домена, как это,

Category { 

public int Id{get;set;} 
public string CategoryName{get;set;} 
public int ParentCategoryID {get;set;} 
public Category ParentCategory {get;set;} 

public virtual IList<Category > Children{get;set;} 
} 

И тогда вы можете использовать некоторые картограф как AutoMapper сопоставить эти модели к модели вида (который имеет свойства, которые вам нужны для объекта json)

1

Я бы не стал смешивать данные и инструкции UI для начала! Он загромождает сообщение JSON избыточными повторяющимися данными. Я думаю, что клиент должен решить, где разместить данные и как их отображать, или иначе вы должны отправить эти инструкции отдельно (например, в качестве первой части сообщения).

Тем не менее, самый простой способ, чтобы получить это сделано, имея ваше определение класса, как это:

class Category 
{ 
    public int Id { get; set; } 
    public string CategoryName { get; set; } 
    public int? ParentCategoryID { get; set; } 
    [ForeignKey("ParentCategoryID")] 
    public virtual ICollection<Category> SubCategories { get; set; } 
} 

При запросе Categories с ParentCategoryID == null, с отложенной загрузки включен, и сериализации в JSON вы увидите, что все уровни включены, потому что для каждого Category запрашивается запрос на получение своих детей.

Отметьте, что Category не имеет свойства ParentCategory, потому что это может привести к сбою сериализации JSON из-за циклических ссылок.

Для сериализации вы можете использовать JavaScriptSerializer, если вы не находитесь в контроллерах MVC API.

BTW. best способ сделать это будет оставить вашу модель переноса транспорта невежественной и использовать структуру объектов CategoryDto.

Смежные вопросы