#c_sharp #net #сериализация #десериализация
Пытаюсь сериализовать сложный объект через DataContract. Объект имеет список подобъектов,
которые имеют в свою очередь свой список (назовем - листья дерева). К этим листьям,
например, первого элемента списка основного объекта, можно добраться их других элементов
списка (ссылка одна и та же). Получается довольно сложный граф, в котором много связей.
При десериализации у каждого элемента списка - свои листья, т.е. ссылки теряются,
если в объекте источнике - это один и тот же лист, то после десериализации - просто копия.
Примерно так
A A
/ \ / \
B C ====> B C
\ / | |
D D D[копия]
(это очень упрощенная схема)
Пробовал для всех классов прописать DataContract(IsReference = true), так, на всякий
случай - не помогло.
Есть ли более "быстрый" способ корректной десериализации, кроме как "ручное" выстраивание
структуры повторяющей объект-источник?
Спасибо.
Ответы
Ответ 1
При создании сериализатора задайте ему настройку PreserveObjectReferences = true. var settings = new DataContractSerializerSettings { PreserveObjectReferences = true }; var dcs = new DataContractSerializer(typeof(SomeType), settings); Также можно использовать NetDataContractSerializer.
Комментариев нет:
Отправить комментарий