#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.
Комментариев нет:
Отправить комментарий