Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Try using the <strong>System.Xml.Serialization.XmlInclude</strong> attribute. I'm not sure if I correctly understand your intent of a collection of collections, but assuming that is what you want, here is a working solution. The output follows the code:</p> <pre><code>using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.IO; using System.Xml.Serialization; namespace StackoverflowXxmlSerialize { public enum Status { Pending, Active, Completed, Cancelled } [System.Xml.Serialization.XmlInclude(typeof(UserStory))] [System.Xml.Serialization.XmlInclude(typeof(Task))] public abstract class Entity : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; } public class UserStory : Entity { public uint StoryID { get; set; } public Status Status { get; set; } public ObservableCollection&lt;Task&gt; Tasks { get; set; } } public class Task : Entity { public uint TaskID { get; set; } } class Util { public static void SerializeObjectToXML&lt;T&gt;(T item, string FilePath) { XmlSerializer xs = new XmlSerializer(typeof(T)); using (StreamWriter wr = new StreamWriter(FilePath)) { xs.Serialize(wr, item); } } } public class TestSerialize { static ObservableCollection&lt;Entity&gt; UserStories { get; set; } public static void RunTest() { UserStories = new ObservableCollection&lt;Entity&gt; { new UserStory { StoryID = 127, Status = Status.Active, Tasks = new ObservableCollection&lt;Task&gt;{new Task { TaskID = 11 }, new Task { TaskID = 12 }} }, new UserStory { StoryID = 128, Status = Status.Cancelled, Tasks = new ObservableCollection&lt;Task&gt;{new Task { TaskID = 13 }, new Task { TaskID = 14 }} }, new UserStory { StoryID = 129, Status = Status.Completed, Tasks = new ObservableCollection&lt;Task&gt;{new Task { TaskID = 9 }, new Task { TaskID = 10 }} }, }; ObservableCollection&lt;ObservableCollection&lt;Entity&gt;&gt; Document = new ObservableCollection&lt;ObservableCollection&lt;Entity&gt;&gt;(); Document.Add(UserStories); Util.SerializeObjectToXML&lt;ObservableCollection&lt;ObservableCollection&lt;Entity&gt;&gt;&gt;(Document, @"d:\tmp\junk.txt"); } } } </code></pre> <p>The above code produced this text file:</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;ArrayOfArrayOfEntity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt; &lt;ArrayOfEntity&gt; &lt;Entity xsi:type="UserStory"&gt; &lt;StoryID&gt;127&lt;/StoryID&gt; &lt;Status&gt;Active&lt;/Status&gt; &lt;Tasks&gt; &lt;Task&gt; &lt;TaskID&gt;11&lt;/TaskID&gt; &lt;/Task&gt; &lt;Task&gt; &lt;TaskID&gt;12&lt;/TaskID&gt; &lt;/Task&gt; &lt;/Tasks&gt; &lt;/Entity&gt; &lt;Entity xsi:type="UserStory"&gt; &lt;StoryID&gt;128&lt;/StoryID&gt; &lt;Status&gt;Cancelled&lt;/Status&gt; &lt;Tasks&gt; &lt;Task&gt; &lt;TaskID&gt;13&lt;/TaskID&gt; &lt;/Task&gt; &lt;Task&gt; &lt;TaskID&gt;14&lt;/TaskID&gt; &lt;/Task&gt; &lt;/Tasks&gt; &lt;/Entity&gt; &lt;Entity xsi:type="UserStory"&gt; &lt;StoryID&gt;129&lt;/StoryID&gt; &lt;Status&gt;Completed&lt;/Status&gt; &lt;Tasks&gt; &lt;Task&gt; &lt;TaskID&gt;9&lt;/TaskID&gt; &lt;/Task&gt; &lt;Task&gt; &lt;TaskID&gt;10&lt;/TaskID&gt; &lt;/Task&gt; &lt;/Tasks&gt; &lt;/Entity&gt; &lt;/ArrayOfEntity&gt; &lt;/ArrayOfArrayOfEntity&gt; </code></pre>
 

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