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