powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как сериализовать дерево и передать во вью в Json?
8 сообщений из 8, страница 1 из 1
Как сериализовать дерево и передать во вью в Json?
    #39845053
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дан такой класс, узел, из которых строится дерево:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
public class JsTreeModel
{
     public string id { get; set; }
     public string parent { get; set; }
     public string text { get; set; }
     public bool children { get; set; } = false; // if node has sub-nodes set true or not set false
}

static List<JsTreeModel> GetTree()
        {
            var items = new List<JsTreeModel>();

            JsTreeModel it = new JsTreeModel();
            it.id = "#";
            it.text = "Root";
            it.children = true;

            JsTreeModel it11 = new JsTreeModel();
            it11.id = "11";
            it11.text = "Child 1";
            it11.parent = "#";
            it11.children = false;

            JsTreeModel it12 = new JsTreeModel();
            it12.id = "12";
            it12.text = "Child 2";
            it12.parent = "#";
            it12.children = false;

            items.Add(it);
            items.Add(it11);
            items.Add(it12);
            return items;
        }

private  void getTreeNodes()
{
     var nodes = new List<JsTreeModel>();
     nodes = GetTree();
     ViewBag.Json = new HtmlString(JsonConvert.SerializeObject(nodes, Formatting.Indented));
return;
}



Функция GetTree() делает список, он сериализуется, но json получается не такой как надо,
нужен json типа:
Код: c#
1.
string s4 = @"[{""id"":1,""text"":""Root"",""children"":[{""id"":2,""text"":""Child 1""},{""id"":3,""text"":""Child 2""}]}]";



Как сделать правильно: надо как-то поменять класс, чтобы можно было в приложении создавать дерево (например, из базы) и затем сериализовать и получить такой json?
Или делать обход дерева и руками фромировать строку вместо сериализации.
...
Рейтинг: 0 / 0
Как сериализовать дерево и передать во вью в Json?
    #39845055
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

я может чего не понимаю, но если хочется, чтобы свойство children содержало список дочерних узлов, то оно должно быть подходящего для этого типа (тот же List<JsTreeModel>), а не bool

вы надеетесь на то, что сериализатор обладает разумом и поймёт, что из-за того, что it.id = "#", а it11.parent = "#" и it12.parent = "#", то надо бы в массив дочерние узлы собрать?
то есть мысли ваши заодно прочитает?
...
Рейтинг: 0 / 0
Как сериализовать дерево и передать во вью в Json?
    #39845057
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public class TreeNodeJsonModel
{
    [JsonProperty("id")]
    public string Id { get; set; }

    [JsonProperty("text")]
    public string Text { get; set; }

    [JsonProperty("children", NullValueHandling = NullValueHandling.Ignore)]
    public List<TreeNodeJsonModel> Children{ get; set; }
}

private List<TreeNodeJsonModel> GetTree()
{
    var tree = new List<TreeNodeJsonModel>();
    var root = new TreeNodeJsonModel() { Id = "#", Text = "Root" };

    root.Children = new List<TreeNodeJsonModel>();
    root.Children.Add(new TreeNodeJsonModel() { Id = "11", Text = "Child 1" });
    root.Children.Add(new TreeNodeJsonModel() { Id = "12", Text = "Child 2" });

    tree.Add(root);

    return tree;
}
...
Рейтинг: 0 / 0
Как сериализовать дерево и передать во вью в Json?
    #39845092
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухРолг Хупин,

я может чего не понимаю, но если хочется, чтобы свойство children содержало список дочерних узлов, то оно должно быть подходящего для этого типа (тот же List<JsTreeModel>), а не bool

вы надеетесь на то, что сериализатор обладает разумом и поймёт, что из-за того, что it.id = "#", а it11.parent = "#" и it12.parent = "#", то надо бы в массив дочерние узлы собрать?
то есть мысли ваши заодно прочитает?


Да это не я надеюсь, это всё попытки нарисовать дерево во вью.
Я потому и спросил, что children явно должен содержать поддерево
...
Рейтинг: 0 / 0
Как сериализовать дерево и передать во вью в Json?
    #39845096
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинДмитрий МухРолг Хупин,

я может чего не понимаю, но если хочется, чтобы свойство children содержало список дочерних узлов, то оно должно быть подходящего для этого типа (тот же List<JsTreeModel>), а не bool

вы надеетесь на то, что сериализатор обладает разумом и поймёт, что из-за того, что it.id = "#", а it11.parent = "#" и it12.parent = "#", то надо бы в массив дочерние узлы собрать?
то есть мысли ваши заодно прочитает?


Да это не я надеюсь, это всё попытки нарисовать дерево во вью.
Я потому и спросил, что children явно должен содержать поддерево
От того, что вы по не понятной причине определили свойство string parent и bool children , дерево точно не нарисуется.
Вы надеетесь, что компонент, рисующей дерево сам поймёт это сочетание?
Нет. Либо такое поведение задокументировано, либо его надо реализовать самому.

Что за компонент в итоге используете?
...
Рейтинг: 0 / 0
Как сериализовать дерево и передать во вью в Json?
    #39845126
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухРолг Хупинпропущено...


Да это не я надеюсь, это всё попытки нарисовать дерево во вью.
Я потому и спросил, что children явно должен содержать поддерево
От того, что вы по не понятной причине определили свойство string parent и bool children , дерево точно не нарисуется.
Вы надеетесь, что компонент, рисующей дерево сам поймёт это сочетание?
Нет. Либо такое поведение задокументировано, либо его надо реализовать самому.

Что за компонент в итоге используете?

jstree.com

неплохой, промудохался, поа настроил jquery, не все в примерах описано, приходится втыкать.
Например, мне надо заполнить из контроллера, получается ajax вызовом, с этим вроде разобрался.
Далее - на сайте в примерах есть, что контекстное меню моно сделать, но как сделать - не описано нормально.
Еще мне надо иконки грузить не с диска, а из базы, с этим непонятно, как быть.
...
Рейтинг: 0 / 0
Как сериализовать дерево и передать во вью в Json?
    #39845157
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинДмитрий Мухпропущено...

От того, что вы по не понятной причине определили свойство string parent и bool children , дерево точно не нарисуется.
Вы надеетесь, что компонент, рисующей дерево сам поймёт это сочетание?
Нет. Либо такое поведение задокументировано, либо его надо реализовать самому.

Что за компонент в итоге используете?

jstree.com
хм, там же описан ожидаемый формат: https://www.jstree.com/docs/json/

либо children в виде массива строк, или объектов без свойства parent
либо id + parent и никакого свойства children

компонент не расчитан на свойсто children в виде булевого флага
...
Рейтинг: 0 / 0
Как сериализовать дерево и передать во вью в Json?
    #39845173
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухРолг Хупинпропущено...


jstree.com
хм, там же описан ожидаемый формат: https://www.jstree.com/docs/json/

либо children в виде массива строк, или объектов без свойства parent
либо id + parent и никакого свойства children

компонент не расчитан на свойсто children в виде булевого флага

это да, меня сбил с толку пример одного девелопера, в интернете нарыл.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как сериализовать дерево и передать во вью в Json?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]