2016-02-01 1 views
0

Мне нужно сериализовать некоторый XML-объект для объекта. Я не контролирую структуру XML, поэтому я застрял в этой ситуации. Структура подобна этому пример:Сериализация XML с плоской повторяющейся структурой

<A> 
    <B>Elements that are the stuff of B</B> 
    <C>Stuff about the stuff in B</C> 
    <B>Different stuff</B> 
    <C>Stuff about the different stuff</C> 
    <C>Some more stuff about the different stuff</C> 
    <B>Weird stuff</B> 
    <C>Stuff about the Weird Stuff</C> 
    <C>Still more stuff about the Weird Stuff</C> 
    <D>New thing that goes with the Weird Stuff</D> 
    <B>Things</B> 
    <C>Stuff about Things</C> 
</A> 

Я хотел бы получить этот сериализуются объект, который сохраняет информацию о структуре родственной.

public class A 
{ 
public List<BCD> BCD {get; set;} 
} 

public class BCD 
{ 
public B Bfield {get; set;} 
public List<C> Cfield {get; set;} 
public D Dfield {get; set;} 
} 

public class B 
{ 
// class details 
} 

public class C 
{ 
// class details 
} 

public class D 
{ 
// class details 
} 

Когда я пробую это, он не работает. Есть ли что-нибудь, что я могу сделать, чтобы поддерживать эту структуру с помощью XMLSerializer?

+0

A, B и C - объект (сложные элементы в XML) или строки? – Eulogy

+0

B, C, D - сложные элементы. Мой пример плохо демонстрирует это. – user3841460

ответ

0

Так что я поглядывал вокруг решения и придумал это что не совсем то, что я искал. Эта структура класса сохраняет порядок элементов семейства в коллекции, но не создает объекты для представления отдельной группы братьев и сестер.

public class A 
{ 
[XmlElementAttribute("B", typeof(B))] 
[XmlElementAttribute("C", typeof(C))] 
[XmlElementAttribute("D", typeof(D))] 
public List<object> BCD {get; set;} 
} 

public class B 
{ 
// class details 
} 

public class C 
{ 
// class details 
} 

public class D 
{ 
// class details 
} 

Конечный результат: BCD представляет собой набор объектов B, C, D в том порядке, в котором они появляются в XML.

-1

Вы можете попробовать следующие шаги:

  1. конвертировать XML в XSLT, используя xsd.exe (особенность VS)
  2. преобразования XSLT в классе снова с помощью xsd.exe
  3. попробовать сериализовать и десериализуйте свой xml для этого объекта класса.
  4. теперь вы можете играть с этим объектом класса для выполнения любых действий.

Надеется, что это поможет ..

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