2016-02-24 2 views
0

У меня есть проблема, когда я хочу, чтобы сериализовать ниже XML, поскольку сегмент E1WPU03 не является обязательным, но если он имеет значение, то мне нужно поставить его под сегментом E1WPU02XML Сериализация с дополнительным сегментом

Я был попробовать два дня, но в конце концов он пишет segmen E1WPU02 сначала, а затем сегмент E1WPU03, который не работает

Как это сделать?

correct XML

ответ

1

XmlSerializer обычно не чередовать элементы. Вы можете обмануть его, однако, с List<> и несколько [XmlElement(...)] указания типа:

class Program 
{ 
    static void Main() 
    { 
     var root = new MyXmlRoot 
     { 
      Items = { 
       new Bar { }, 
       new Blap { }, 
       new Bar { }, 
      } 
     }; 
     var ser = new XmlSerializer(typeof(MyXmlRoot)); 
     ser.Serialize(Console.Out, root); 
    } 
} 

public abstract class Foo { } // base type used for the list 
public class Bar : Foo { 
    // more props here 
} 
public class Blap : Foo { 
    // more props here 
} 
public class MyXmlRoot 
{ 
    private readonly List<Foo> items = new List<Foo>(); 
    [XmlElement("E1WPUO2", typeof(Bar))] 
    [XmlElement("E1WPUO3", typeof(Blap))] 
    public List<Foo> Items { get { return items; } } 
} 

Другие элементы, такие как E1WPU01 не нужно идти в Items, если нет необходимости чередовать их - они могут перейти непосредственно на MyXmlRoot (как вы, вероятно, уже имеете).

+0

wow..thanks a bunch Marc, он работает как шарм: D – Erick

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