Управление порядком сериализации в C#

Я использую XmlSerializer для сериализации объекта и записи его в файл. У меня был довольно большой успех с сериализатором, делающим то, что я хочу, с точки зрения вложенных элементов и того, что сериализуется как элементы и атрибуты. К сожалению, я столкнулся с проблемой, когда мне нужно сериализовать один член класса перед другим. В другом месте у меня сработало то, что все, что объявлено первым, сначала сериализуется, но в этом случае у меня не так много успеха с этим. Есть ли способ вручную контролировать порядок сериализации вещей?


person Zann Anderson    schedule 30.07.2010    source источник


Ответы (2)


[XmlElementAttribute(Order = 1)] 
public int Field1 {...} 

[XmlElementAttribute(Order = 2)] 
public int Field2 {...} 

Подсказка: вы должны указать Order для всех ваших участников.

Будьте осторожны — десериализация будет работать только в том случае, если свойства в XML-документе расположены в том же порядке. В противном случае он будет молча игнорировать свойства не по порядку.

person Robert Harvey    schedule 30.07.2010
comment
Идеально. Думаю, я либо пропустил это в MSDN, либо недостаточно копался, чтобы найти. Спасибо. - person Zann Anderson; 31.07.2010
comment
Возможно, связано: есть ли способ управлять порядком с помощью XML-атрибутов? XmlAttributeAttribute не имеет такого свойства. - person Travis Gockel; 05.08.2010
comment
@Travis: По моему опыту, меньше (если вообще есть) проблем с сериализацией атрибутов в том порядке, в котором они объявлены. - person Robert Harvey; 05.08.2010
comment
если вы не укажете порядок для всех, остальные будут добавлены в конце или в начале? Было бы неплохо разрешить отрицательные числа контролировать это - person George Birbilis; 11.11.2020
comment
чтобы ответить на мой собственный комментарий, к сожалению, XmlSerializer требует, чтобы вы добавили порядок для всех элементов и также имели такие классы-предки. Если вы не можете управлять классом-предком, вы можете использовать XmlAttributeOverride, как показано здесь: dotnetfiddle.net/Bvbi0N - person George Birbilis; 17.11.2020

XmlElementAttribute.Order, который управляет " явный порядок, в котором элементы сериализуются или десериализуются».

person Tim Robinson    schedule 30.07.2010