9 / 9 / 0
Регистрация: 16.03.2014
Сообщений: 136
|
||||||
1 | ||||||
Как сериализовать Список списков списков?22.01.2019, 22:06. Показов 6155. Ответов 14
Метки нет (Все метки)
У меня есть игра, в ней пользователь может сохранять уровни и играть их в будующем. На каждом уровне есть одна или несколько линий состоящийх из точек.Количество точек зависит от того какой длинны линию нарисовал игрок. Линии создаються с помощью компонента LineRenderer. Сначала для теста я решил сохраниять точки при помощи списка списков. Также пришлось разбивать точку Vector3 на три переменные float так как сериализатор не сохраняет Vector3 так как это класс unity а не C#. Однако потом пришлось расширить до списка списков списков так как нужно сохранять точки каждой линии для каждого уровня. Но теперь сериализатор отказалься сохранять списки списков списков. Видимо максимум он может только список списков сохранять. И как же чёрт побери мне сохранить этот список данных.
В общем сейчас сериализованный клас выглядит вот так.
Помогите плиз с этой проблемой если кто знает решение..
0
|
22.01.2019, 22:06 | |
Ответы с готовыми решениями:
14
Как из двух списков сделать один список кортежей/списков Объединение 2 и более списков в список списков по индексу без использования циклов Копирование данных двумерного массива состоящего из списков в список списков. Написать программу, которая получает список из списков из списков чисел |
6507 / 4084 / 1605
Регистрация: 09.05.2015
Сообщений: 9,548
|
|
22.01.2019, 22:16 | 2 |
Как сериализуете? Используете Newtonsoft.Json для сериализации? Что-то другое?
1
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
23.01.2019, 01:02 | 3 |
Встроенный JsonUtility должен принимать
1
|
6507 / 4084 / 1605
Регистрация: 09.05.2015
Сообщений: 9,548
|
|
23.01.2019, 01:10 | 4 |
Мусор, даже классы со свойствами не сериализует. Не говоря уже о классах с полями в виде массивов или списков.
1
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
23.01.2019, 09:35 | 5 |
Someone007, может АВТОсвойства, а не свойства? У меня нормально массив Vector3 сериализовался. И массив классов, где классы с массивами Vector3 - тоже сериализовался.
1
|
9 / 9 / 0
Регистрация: 16.03.2014
Сообщений: 136
|
|
23.01.2019, 10:49 [ТС] | 6 |
Я использую баннерную серриализацию. Так как давно еще знающие люди ее советовали. Да и читал я про нее много хорошего.
Добавлено через 17 минут Тфу ты, бинарную. Сорри за кламбур пишу с телефона.
0
|
23.01.2019, 11:03 | 7 | |||||
SERG__ZV,
Во-первых, что значит "сериализатор отказалься сохранять"? Выдается ошибка? Приведите полный текст ошибки. А лучше, выложите тестовый проект, который можно запустить и увидеть ошибку. У меня например ваш класс сериализуется нормально. Во-вторых, почему у вас класс для сериализации такой уродливый? Вы разве сами не чувствуете, что List<List<List<float>>> - это мягко говоря не очень?Почему не сделать нормальные классы, с нормальными именами, по правилам ООП? Тем более у вас же в коментах уже написано как это должно примерно выглядеть. На верхнем уровне должен быть класс Levels, который будет содержать список уровней:
А класс Point должен реализовать кастомную сериализацию, которая сможет сериализовать Vector3. И тогда ваша модель станет более красивой, расширяемой, и глядишь и ошибка сериализации уйдет.
1
|
9 / 9 / 0
Регистрация: 16.03.2014
Сообщений: 136
|
|
23.01.2019, 14:57 [ТС] | 8 |
Хорошо домой приду выложу ошибку. Тот пример что вы привели это сериализация списка.
Список float у меня тоже сериализуеться. Список списков тоже сериализуеться. А когда я вложил это в еще одну конструкцию. То есть сделал список списков списков как на примере выше то стала появляться ошибка. List exception не возможно преобразовать list ..... В list... Домой приду выложу ошибку. Могу даже пример собрать в котором эта ошибка будет. Добавлено через 8 минут Во-вторых, почему у вас класс для сериализации такой уродливый? Вы разве сами не чувствуете, что List<List<List<float>>> - это мягко говоря не очень? Чувствую. Но я не знаю как реализовать более удобным способом.. Как это должно выглядеть я не знаю потому как сериализатор не хочет сохранять никакой класс созданный мной в ручную а только те что есть изначально в c#. Гуглил на тему как сериализовать класс GameObject и vector3 там писали что этот классы юнити и их целиком не сериализовать. Добавлено через 4 минуты Ах да игра собирается и запускаеться под андроид возможно это тоже как то влияет.. Добавлено через 1 час 20 минут Я тогда лучше сразу сделаю пример того как вы сказали и если что-то не получится выложу сюда. И правда если есть лучший путь зачем исправлять баги на худшем решении задачи...
0
|
753 / 600 / 204
Регистрация: 06.08.2015
Сообщений: 2,432
|
|
23.01.2019, 17:09 | 9 |
SERG__ZV, лучше опишите смысл тройных вложенных списков
1
|
9 / 9 / 0
Регистрация: 16.03.2014
Сообщений: 136
|
|
23.01.2019, 21:45 [ТС] | 10 |
Я использовал тройной список для того чтобы сохранить все точки всех линий на всех уровнях созданных игроком.
Первая ступень списка означает уровень, вторая ступень означает линию, третяя ступень означает точку. Но я так делал потому что думал что бинарная сериализация может использовать лишь стандартные классы библотеки C# но не описанные мной лично или в unity. Сейчас попробую реализовать пример который мне предложили выше. Добавлено через 41 минуту Проблема со списками решена, оказываеться ошибка была потому что я переписал списки списков в списки списков списков. Но при этом пыталься загрузить старое сохранение где были сохранены списки списков. Естественно нужно было всего лишь создать новое сохранение с обновлённым классом. Однако раз тут предложили лучшую и более удобную систему я всё таки доделаю её и выложу сюда пример так как скорее всего он работать не будет( Поэтому вопрос отстаёться открытым. Добавлено через 25 минут Что такое кастомная сериализация? Разве не нужно сериализовывать верхний класс целиком? А именно класс Levels так было бы удобнее если это возможно... Вот что у меня получилось. Так как с классами я не совсем понял осталься пустой код.
0
|
9 / 9 / 0
Регистрация: 16.03.2014
Сообщений: 136
|
|
23.01.2019, 21:48 [ТС] | 11 |
0
|
23.01.2019, 22:15 | 12 | ||||||||||
Сообщение было отмечено SERG__ZV как решение
Решение
1
|
9 / 9 / 0
Регистрация: 16.03.2014
Сообщений: 136
|
|
23.01.2019, 22:40 [ТС] | 13 |
Спасибо завтра прийду с работы буду разбирать.
0
|
9 / 9 / 0
Регистрация: 16.03.2014
Сообщений: 136
|
||||||
25.01.2019, 22:31 [ТС] | 14 | |||||
Почти разобрал первый скрипт) Ну и сложнющий он для меня. Пришлось подучиться). У меня вопрос к вашему коду.
Почему метод с названием Получить данные объекта по сути добавляет данные в него, ведь судя по названию он должен оттуда их получать...
Насчёт интерфейса неправильный коментарий выше, оказываеться их не наследуют а реализуют) Добавлено через 30 секунд Но вопрос о методе в силе)
0
|
9 / 9 / 0
Регистрация: 16.03.2014
Сообщений: 136
|
|
28.01.2019, 21:55 [ТС] | 15 |
Наконецто всё разобрал. Код работает, сериализация десериализация прописанна у вас гораздо короче чем я делал с помошью streamwriter и streamrider. И создание своих классов тоже круто помогло. Код выглядит гораздо красивее и короче. Пришлось подучиться и разобрать то что было неясно но это даэе хорошо теперь я чуть больше понимаю. Ещё раз спасибо за ваши труды.
1
|
28.01.2019, 21:55 | |
28.01.2019, 21:55 | |
Помогаю со студенческими работами здесь
15
Список списков после добавления списков остается пустым Список списков списков чисел Как сложить сумму из чисел сотен списков и узнать количество списков? Как сравнить значения списков, внутри других списков? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |