Страницы

Поиск по вопросам

вторник, 31 марта 2020 г.

Теряется ссылка на один и тот же объект при сериализации-десериализации через DataContract

#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.

Комментариев нет:

Отправить комментарий