Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/47: Рейтинг темы: голосов - 47, средняя оценка - 4.64
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504

Преобразовать Node в строку и наоборот

05.03.2013, 20:46. Показов 9679. Ответов 119
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имеется класс
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CustomTree
{
    public class Node
    {
        public Node()
        {
            _children = new NodeCollection(this);
        }
        public Node(string name)
        {
            _children = new NodeCollection(this);
            this.Name = name;
        }
        public Node AddNode(string name)
        {
            var rv = new Node(name);
            this.Children.Add(rv);
            return rv;
        }
        Node _parent;
        public Node Parent
        {
            get
            {
                return _parent;
            }
            set
            {
                if (Parent != null || value == null)
                {
                    Parent.Children.Remove(this);
                }
                else
                {
                    value.Children.Add(this);
                }
                _parent = value;
            }
        }
        public string Name { get; set; }
        NodeCollection _children;
        public override string ToString()
        {
            var rv = new StringBuilder(Name);
            foreach (Node ch in Children)
            {
                SubNodeToString(ch, rv);
            }
            return rv.ToString();
        }
        public int Level
        {
            get
            {
                return Parent != null ? this.Parent.Level + 1 : 0;
            }
        }
        void SubNodeToString(Node n, StringBuilder sb)
        {
            sb.Append("\n" + repeat("\t", n.Level));
            sb.Append(n.Name);
            sb.Append(string.Format(" (Parent: {0})", n.Parent.Name));
            foreach (Node ch in n.Children)
            {
                SubNodeToString(ch, sb);
            }
        }
        string repeat(string s, int count)
        {
            var rv = new StringBuilder();
            for (int i = 0; i < count; i++) { rv.Append(s); };
            return rv.ToString();
        }
        public NodeCollection Children
        {
            get
            {
                return _children;
            }
        }
        public class NodeCollection : System.Collections.ObjectModel.Collection<Node>
        {
            internal NodeCollection(Node owner)
            {
                _owner = owner;
            }
            Node _owner;
            protected override void InsertItem(int index, Node item)
            {
                if (!this.Contains(item))
                {
                    base.InsertItem(index, item);
                    item._parent = _owner;
                }
            }
            protected override void RemoveItem(int index)
            {
                this[index]._parent = null;
                base.RemoveItem(index);
            }
        }
    }
}
класс формирует древовидную структуру,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var root = new Node("root");
            var c1 = root.AddNode("child1");
            var c2 = root.AddNode("child2");
            var c1_1 = c1.AddNode("child1_1");
            var c1_2 = c1.AddNode("child1_2");
            var c2_1 = new Node("child2_1");
            c2_1.Parent = c2;
            var c2_2 = c2.AddNode("child2_2");
            Console.Write(root.ToString());
            Console.WriteLine("\n");
            Console.WriteLine("Удаляем узлы\n");
            c2.Children.Remove(c2_2);
            c2_1.Parent = null;
            Console.WriteLine(root.ToString());
            Console.ReadKey();
задача состоит в следующем, нужно сформированное дерево преобразовать в object или строку, передать клиенту(с этим я справлюсь), затем у клиента из object или строки опять получить древовидную структуру
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2013, 20:46
Ответы с готовыми решениями:

Не удается неявно преобразовать тип "UnsafeStack.Node" в "UnsafeStack.Node*" - как исправить?
Узел: namespace UnsafeStack { public unsafe struct Node { public int value; public Node* next; ...

Преобразовать заглавные буквы в строчные и наоборот с использованием таблицы символов
Всем привет! Не подскажете как, допустим в слове &quot;ПриВеТ&quot;, преобразовать заглавные буквы в строчные и наоборот используя таблицу символов?...

Быстрые алгоритмы сборки байтового массива в строку и наоборот
Всем привет! Народ не поделитесь быстрым алгоритмом сборки байтового массива из строки (только цифры) и разборки массива в строку? К...

119
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
09.03.2013, 20:37  [ТС]
Студворк — интернет-сервис помощи студентам
щас попробую

Добавлено через 7 минут
как этим пользоваться там тест на 7000 строк

Добавлено через 1 минуту
во первых что мне с этими проектами сделать? как в свой проект добавить и как сериализовать обьект?
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
09.03.2013, 20:52
и вот посмотри еще
Вложения
Тип файла: rar test-tree.rar (44.2 Кб, 3 просмотров)
1
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
09.03.2013, 21:10
помогло что ниб?
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
09.03.2013, 21:34  [ТС]
Цитата Сообщение от hepper Посмотреть сообщение
помогло что ниб?
разбираюсь, соображаю
а зачем вот так писать
C#
1
var tree = Tree.New(1);
что означает эта цифра?? как я понимаю количество узлов, но я не знаю при создании дерева сколько у меня узлов будет и количество, для чего это вообще?? неужели нельзя просто добавлять наследника, не указывая его номер?

Добавлено через 4 минуты
может быть можно как то сделать что бы вместо числа узлов добовлялось имя узла и создавался узел
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
09.03.2013, 21:42
это значение ветки - дерево это ж структура данных. а примере там структура Int32, значение корневого элемента =1
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
09.03.2013, 21:58  [ТС]
Цитата Сообщение от hepper Посмотреть сообщение
это значение ветки - дерево это ж структура данных. а примере там структура Int32, значение корневого элемента =1
я же говорю не знаю сколько там у меня будет потомков, плюс их нужно удалять и добавлять
не чего у меня не получаеться

Добавлено через 4 минуты
с сериализацией так бы хорошо всё было, если бы она работала, дурацкие деревья
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
09.03.2013, 22:15
Цитата Сообщение от kelod Посмотреть сообщение
я же говорю не знаю сколько там у меня будет потомков, плюс их нужно удалять и добавлять
не чего у меня не получаеться
ну и что...
добавляй и удаляй и вставляй...

C#
1
2
3
4
5
var tree = Tree.New("корень");
        tree.Add("ветка-1");
        tree.Add("ветка-2");
        tree.Children[0].Add("субветка-1");
        tree.Children[1].Add("субветка-2");
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var treeTest = Tree.New("Root");
 
        for (int i = 0; i < 3; i++)
        {
            treeTest.Add("Node-" + i);
            for (int j = 0; j < 4; j++)
            {
                treeTest.Children[i].Add("Node-" + j);
                for (int k = 0; k < 3; k++)
                {
                    treeTest.Children[i].Children[j].Add("Node-" + k);
                }
            }
        }
1
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
09.03.2013, 22:20
попробуй десериализовать это
Вложения
Тип файла: txt treeTest.txt (7.1 Кб, 3 просмотров)
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
09.03.2013, 22:30  [ТС]
Цитата Сообщение от hepper Посмотреть сообщение
попробуй десериализовать это
теперь понятнее как ваше дерево работает, теперь попробую разобраться
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
09.03.2013, 22:33
а десериализовать файл смог?
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
09.03.2013, 23:21  [ТС]
не чего не работает всё равно ошибка
System.Runtime.Serialization.Serializati onException: Field "Collection`1+items" not found in class CustomTree.Node`1+NodeCollection[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
09.03.2013, 23:27
Цитата Сообщение от kelod Посмотреть сообщение
Field "Collection`1+items"
Что-то мне странной кажется эта строка.. Можете трассировкой пройтись? Посмотреть что в коллекции?
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
09.03.2013, 23:44
Цитата Сообщение от kelod Посмотреть сообщение
не чего не работает всё равно ошибка
System.Runtime.Serialization.Serializati onException: Field "Collection`1+items" not found in class CustomTree.Node`1+NodeCollection[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
а ты чтото еще делаешь с сериализованным объектом? или просто как есть передаешь?
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
10.03.2013, 00:00  [ТС]
Цитата Сообщение от hepper Посмотреть сообщение
а ты чтото еще делаешь с сериализованным объектом? или просто как есть передаешь?
из потока извлекаю массив байт и конвертирую в строку
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
 public static byte[] coordb 
        {
            get
            {
                MemoryStream stream = new MemoryStream();
                BinaryFormatter formatter = new BinaryFormatter();
                try
                {
                    var tree = Tree.New("корень");
                    tree.Add("ветка-1");
                    tree.Add("ветка-2");
                    tree.Children[0].Add("субветка-1");
                    tree.Children[1].Add("субветка-2");
 
                    
 
                    formatter.Serialize(stream, tree);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
 
                //stream.Position = 0;
                //Get byte array
                //byte[] buffer = stream.ToArray();
                byte[] b = stream.GetBuffer();
                stream.Close();
                return b;
                
            }
            set 
            {
                
            }
        }
C#
1
2
3
4
5
6
7
response.Parameters = new Dictionary<byte, object> { 
                                { 1, reader["login"].ToString() },
                                { 2, reader["opit"].ToString() },
                                { 3, reader["scope"].ToString() },
                                { 4, reader["zvan"].ToString() },
                                { 5, reader["avatar"].ToString() },
                                { 6,  Convert.ToBase64String(Options.coordb) } };
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
10.03.2013, 00:24
а ты не пробовал передавать как есть массивом байт? мб у тя конвертор косячит. и файл что я скинул десериализовал? надо пробовать методом исключения искать глюк
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
10.03.2013, 01:43  [ТС]
Цитата Сообщение от hepper Посмотреть сообщение
а ты не пробовал передавать как есть массивом байт? мб у тя конвертор косячит. и файл что я скинул десериализовал? надо пробовать методом исключения искать глюк
файл не десериализируеться фигню какую то пишет, да наверно так и будет, класс то другой
передавать пробывал просто массив, к клиенту вроде приходит массив, но в десериализатор не вставляется просто так, говорит обьект а не byte[], конвертирую обьект в строку, потом в byte[] получаю ошибку длинны файла, преобразомывать пробывал и tostring() и convert.tostring() и tobase64string.
тут явно дело в классе или в том где я что сериализую
схема у меня такая примерно:
СЕРВЕР
запускается класс server при подключении клиента делает ему новый класс Client, в котором обрабатываются все данные и когда клиент присылает что-нибудь выполняются какие то действия, кроме того есть класс Options? в нём я храню всякие данные, переменные общие и прочее, там же и делаю сериализацию, все эти классы в пространстве имён Photonserver

КЛИЕНТ
запускается скрипт Login, в этот момент создаётся класс, в котором принимаються/отправляються все данные от сервера, в нём и происходит десериализация

я уже пробывал и namespace создавать отдельный и класс всё равно пишет что не нравиться ему поле, да и сериализирует по разному на клиенте и сервере, массивы разные, поэтому и распаковывает по другому , а вот в чём дело не понятно, dll одна
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
10.03.2013, 02:07
если доходит массив или строка (неважно) в том виде в котором послано, то и десериализоваться должно правильно. т.к. клиент сериализует и после десериализует все нормально, так же и сервер. тут в другом наверно дело.
еще замени
C#
1
byte[] b = stream.GetBuffer();
на
C#
1
2
3
             byte[] b = new byte[stream.Length];
             Array.Copy(stream.GetBuffer(), b, b.Length);
            stream.Close();
Добавлено через 1 минуту
я пытался по всякому воспроизвести ошибку - невыходит , не с вашим классом не с другими... но нормально сериализует и десериализует...
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
10.03.2013, 02:42  [ТС]
Цитата Сообщение от hepper Посмотреть сообщение
если доходит массив или строка (неважно) в том виде в котором послано, то и десериализоваться должно правильно. т.к. клиент сериализует и после десериализует все нормально, так же и сервер. тут в другом наверно дело.
еще замени
C#
1
byte[] b = stream.GetBuffer();
на
C#
1
2
3
             byte[] b = new byte[stream.Length];
             Array.Copy(stream.GetBuffer(), b, b.Length);
            stream.Close();
Добавлено через 1 минуту
я пытался по всякому воспроизвести ошибку - невыходит , не с вашим классом не с другими... но нормально сериализует и десериализует...
так мне нужно десериализировать в юнити, наверно в этом проблема, там кажется не не фреймворк , а MONO работает, может в этом проблема?
я когда сериализирую на сервере и на клиенте одно и тоже массивы разные получаются, а такого же не должно быть

Добавлено через 1 минуту
ещё я тут подумал, может методы нужно в саму dll запихнуть? я попробывал класс сделать, но всё равно ошибка вылезла, может нужно разные классы, один для упаковки, другой для распаковки?

Добавлено через 7 минут
попробывал ваш код, ровным счётом ничего не поменялось, та же ошибка, может быть можно какое нибудь приложение написать, которое бы занималось сериализацией?
0
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
10.03.2013, 02:47
а код получения буфера менял?
попробуй методы сериалицации/десериализации засунь в длл с классом дерева. и сделай еще раз массив одного и того же объекта и скинь сюда.
0
11 / 11 / 0
Регистрация: 17.01.2013
Сообщений: 504
10.03.2013, 16:14  [ТС]
Цитата Сообщение от hepper Посмотреть сообщение
а код получения буфера менял?
попробуй методы сериалицации/десериализации засунь в длл с классом дерева. и сделай еще раз массив одного и того же объекта и скинь сюда.
я пол ночи этим и занимался, получается тоже самое, на клиенте один массив, на сервере другой

Добавлено через 4 часа 0 минут
наверно придётся делать xml , раз с бинарником не получаеться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2013, 16:14

Преобразовать строку
Дано целое число N (&gt; 0) и строка S. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить...

Преобразовать строку
добрый день, знаю, тема заезженная, но походу у меня руки из ж*пы ((( есть такая строка я ее парсю с хтмл страницы и вывожу в листбокс,...

Преобразовать строку в массив
Привет всем, у меня есть вот такой код: WebClient client = new WebClient(); client.Headers =...

Преобразовать строку в int
Есть файл: 13 23 41 12 32 0 2 4

Преобразовать строку в дату
Помогите пожалуйста не могу сделать, как преобразовать время в строку,работаю c Excel, надо вытащить с ячейки время указанное в ней и ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru