2015-04-09 4 views
0

Поэтому у меня есть список различных элементов Xml под родителю вроде этого:XmlSerializer экономии элемент порядка

<Group> 
     <Circle Radius="5"/> 
     <Rectangle Height="10" Width="15"/> 
     <Rectangle Height="7" Width="8"/> 
     <Circle Radius="12"/> 
    </Group> 

И классы:

public class Group 
    { 
     [XmlElement("Circle")] 
     public List<Circle> Circles { get; set;} 

     [XmlElement("Rectangle")] 
     public List<Circle> Circles { get; set;} 
    } 

    public class Circle 
    { 
     // The position it was encountered in the list of elements 
     public int Position { get; set; } 

     [XmlAttribute("Radius")] 
     public string Radius { get; set;} 
    } 

    public class Rectangle 
    { 
     // The position it was encountered in the list of elements 
     public int Position { get; set; } 

     [XmlAttribute("Width")] 
     public string Width { get; set; } 

     [XmlAttribute("Length")] 
     public string Length { get; set; } 
    } 

Поэтому в основном то, что я хотел бы здесь нужно сохранить порядок, в котором эти разные элементы произошли как дочерние элементы под родителем, сохраняя свое место в позиции integer. Единственное решение, о котором я могу думать, это иметь статическую переменную, которая учитывает экземпляры этих объектов и задает позицию, используя счетчик указанной переменной. Хотелось бы верить, что есть «более чистый» способ справиться с этим, и я бы по достоинству оценил любые предложения.

Edit: Чтобы быть более ясно, куда я иду с этим я хочу взять два списка (потому что они имеют разные объекты с разными атрибутами) и совместно nvert их к другому классу с общим базовый класс. Поэтому у меня есть список этих элементов базового класса, которые упорядочены так же, как они были объявлены в xml, чтобы я мог нарисовать их на экране в этом порядке (подумайте о панели стека). Таким образом, если наследование возможно во время десериализации Xml, которое также может устранить мою проблему, если они автоматически могут быть проанализированы в список базового класса.

+0

Можете ли вы разместить пример желаемого результата? –

+0

Не является ли «списком » сериализованным и десериализованным по заказу? – CodeCaster

+0

Я обновил свой ответ, извините за двусмысленность. – Thermonuclear

ответ

0

Я думаю, чтобы помочь вам

[XmlElementAttribute (Order = 1)]

Визит Controlling order of serialization in C#

+0

Нет, это диктует, как свойства внутри класса сериализуются. OP хочет диктовать порядок, в котором элементы списка сериализуются. Кроме того, если вы думаете, что на вопрос ответили на другой вопрос (и только если вы уверены), отметьте прежний вопрос, чтобы закрыть его как дубликат последнего. – CodeCaster

+0

Я ценю быстрый ответ, и это хорошая информация, однако это не решает мою проблему. Мне нужно сохранить порядок, в котором они встречаются в xml, поэтому, когда я рисую, мои круги и прямоугольники на экране будут отображаться в том же порядке, который был объявлен в группе. – Thermonuclear

1

Вы определяете группу элемент неправильно. Вероятно, вы должны определить его как один список и правильно сохранить порядок в списке.

Список должен быть типа объекта (или общего базового типа).

см. https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute%28v=vs.110%29.aspx

+0

Как только я добавил, что редактирование, я начал изучать наследование во время десериализации и нашел по существу это. Даже не подумал, что это возможно до сих пор. Спасибо, сэр, это именно то, что я хотел. – Thermonuclear

Смежные вопросы