Note that there are some explanatory texts on larger screens.

plurals
  1. POc# XmlElment change order in derived class
    primarykey
    data
    text
    <p>I'm trying to serialize a XML. I want to add a new property in a derived class and place it between the other properties of the base class.</p> <p>In the sample I want to place the 'SpecialInterests' between the 'Name' and the 'Age' of the base class.</p> <h2>XML</h2> <pre><code>&lt;!-- Output --&gt; &lt;PersonenListe xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt; &lt;PersonenArray&gt; &lt;PersonObjekt&gt; &lt;Name&gt;Max Man&lt;/Name&gt; &lt;Age&gt;33&lt;/Age&gt; &lt;/PersonObjekt&gt; &lt;PersonObjekt xsi:type="SpecialPerson"&gt; &lt;Name&gt;Albert Einstein&lt;/Name&gt; &lt;Age&gt;36&lt;/Age&gt; &lt;SpecialInterests&gt;Physics&lt;/SpecialInterests&gt; &lt;/PersonObjekt&gt; &lt;/PersonenArray&gt; &lt;/PersonenListe&gt; &lt;!-- Desire --&gt; &lt;PersonenListe&gt; &lt;PersonenArray&gt; &lt;PersonObjekt&gt; &lt;Name&gt;Max Man&lt;/Name&gt; &lt;Age&gt;33&lt;/Age&gt; &lt;/PersonObjekt&gt; &lt;PersonObjekt xsi:type="SpecialPerson"&gt; &lt;Name&gt;Albert Einstein&lt;/Name&gt; &lt;SpecialInterests&gt;Physics&lt;/SpecialInterests&gt; &lt;Age&gt;36&lt;/Age&gt; &lt;/PersonObjekt&gt; &lt;/PersonenArray&gt; &lt;/PersonenListe&gt; </code></pre> <h2>c# - Main (Creating instances and serialization)</h2> <pre><code>static void Main(string[] args) { PersonalList personen = new PersonalList(); Person normPerson = new Person { Name = "Max Man", Age = 33 }; SpecialPerson specPerson = new SpecialPerson { Name = "Albert Einstein", Interests = "Physics", Age = 36 }; personen.AddPerson(normPerson); personen.AddPerson(specPerson); Type[] personTypes = new Type[personen.Persons.Count]; for (int i = 0; i &lt; personen.Persons.Count; i++) { personTypes[i] = personen.Persons[i].GetType(); } XmlSerializer serializer = new XmlSerializer(typeof(PersonalList), personTypes); FileStream fs = new FileStream("Personenliste.xml", FileMode.Create); serializer.Serialize(fs, personen); fs.Close(); personen = null; // Deserialize fs = new FileStream("Personenliste.xml", FileMode.Open); personen = (PersonalList)serializer.Deserialize(fs); serializer.Serialize(Console.Out, personen); Console.ReadLine(); } </code></pre> <h2>Models</h2> <pre><code>[XmlRoot("PersonenListe")] [XmlInclude(typeof(Person))] public class PersonalList { [XmlArray("PersonenArray")] [XmlArrayItem("PersonObjekt")] public List&lt;Person&gt; Persons = new List&lt;Person&gt;(); public void AddPerson(Person person) { Persons.Add(person); } } [XmlType("Person")] public class Person { [XmlElement(ElementName = "Name", Order = 1)] public virtual string Name { get; set; } [XmlElement(ElementName = "Age", Order = 3)] public virtual int Age { get; set; } } [XmlType("SpecialPerson")] public class SpecialPerson : Person { [XmlElement(ElementName = "Name", Order = 1)] public override string Name { get; set; } [XmlElement(ElementName = "SpecialInterests", Order = 2)] public string Interests { get; set; } [XmlElement(ElementName = "Age", Order = 3)] public override int Age { get; set; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload