C # Сохранить / Загрузить объекты в / из файлов: отдельные экземпляры - PullRequest
1 голос
/ 12 марта 2011

Я работаю над приложением Windows.Инструмент позволяет пользователю создавать данные.
Я ищу способ сохранить работу пользователя в файл.Я слышал о сериализации XML, но я не нашел ответа на следующий вопрос:

Скажем, у меня есть 2 списка, и есть объекты, на которые ссылаются из обоих списков (оба списка указывают на один и тот же экземпляробъекта).Если я перейду к обоим спискам, чтобы сохранить все объекты, будет ли этот объект сохранен только один раз, поскольку он является единственным экземпляром, или он будет сохранен дважды, поскольку на него ссылаются из обоих списков?

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

Может ли сериализация XMLсделать это в C #?
Или, если есть лучший способ, что это?

Спасибо, М.

1 Ответ

1 голос
/ 12 марта 2011

XmlSerializer не будет сохранять ссылки на объекты. После десериализации object.ReferenceEquals вернет false, где он вернул бы true перед сериализацией.

Вам нужно использовать DataContractSerializer и установить PreserveObjectReferences, это решит ваш случай.

В качестве альтернативы, если вы должны использовать XML, вы можете добавить атрибуты самостоятельно и использовать события десериализации для повторной создания любых ссылок на объекты, но это требует довольно большой работы.

...