2013-05-09 1 views
3

Я пытаюсь сериализовать граф объектов в JSON.NET, в котором Galaxy содержит StarSystems, StarSystem содержит Планеты, Планета содержит Колония, Колония имеет Владельца, а у Галактики также есть список Империй, каждый из которых имеет список изученных StarSystems. Итак, есть круговая ссылка между StarSystem, Planet и Empire.JSON.NET молча игнорирует круговые ссылки и устанавливает произвольные ссылки в цепочке на нуль, чтобы их разрешить

То, что я не понимаю, - это поведение, которое я получаю, когда я сериализую объектный граф. Вместо того, чтобы бросать ошибку, когда я имею обработку опорного контура установлен по умолчанию, и пытается сериализовать все, когда я его установить в режим сериализации, это, кажется, сериализации несколько звеньев в цепи, а затем отказавшись и настройки произвольных значений (в моем случае исследуемые звездные системы) до нуля. Естественно, это вызывает сбои в другом месте приложения, когда он ищет звездные системы, но находит только нули!

Может ли это иметь отношение к тому факту, что некоторые из звеньев в цепочке не являются прямыми ссылками, а коллекциями? Например. у империи нет одной разведанной звездной системы, но список из них.

Так как я могу сделать JSON.NET сериализацией всего? Нужно ли мне устранять циклические ссылки и просто передавать объекты ID вместо фактических ссылок на объекты в моей объектной модели? Я действительно не хочу это делать только для сериализации!

+1

У вас есть код? –

+0

У JSON.NET не должно быть проблем с сериализацией любого графа объектов (или восстановление его корректно). Скорее всего, ваш код нарушен (например, если вы делаете неожиданные вещи в установщиках свойств). Опубликовать код ... –

+0

Не знаете, какой код был бы полезен - код, когда я называю сериализатором? Что-то другое? (Если я не сохраняю и не перезаряжаю игру, а просто работаю в памяти, все выглядит нормально.) – ekolis

ответ

0

Не знаю, как я это сделал, но теперь я просто добавляю нуль в список изученных звездных систем вместо замены списка изученных звездных систем, поэтому я могу просто отфильтровать его. Извините, я не знаю, что я сделал, чтобы исправить это!

+0

И теперь я снова получаю просто нулевые значения. Это совершенно случайно. – ekolis

+0

На самом деле не случайно. Кажется, что проблема связана с тем, что звездная система упоминается через $ ref из империи в JSON, а не в пределах империи. – ekolis

1

Я придумал обходное решение. Вместо каждой империи, хранящей список изученных звездных систем, каждая звездная система будет хранить список империй, которые ее исследовали. Таким образом, нет круглых ссылок!