A serialized <T> list containing a <T> list

I am trying to serialize a list that contains non-system types.

Below is my serialization code that works fine at the top level. and returns a valid XmlDocument, but does not seem to contain anything in the internal list.

I looked around the network - and around SO - but it seems I didn't find anything!

Any help is greatly appreciated.

the code:

public static XmlDocument SerializeToXML<T>(List<T> list, string rootElement) { XmlAttributeOverrides overrides = new XmlAttributeOverrides(); XmlAttributes attr = new XmlAttributes(); attr.XmlRoot = new XmlRootAttribute(rootElement); overrides.Add(typeof(List<T>), attr); XmlDocument xmlDoc = new XmlDocument(); XPathNavigator nav = xmlDoc.CreateNavigator(); using (XmlWriter writer = nav.AppendChild()) { XmlSerializer ser = new XmlSerializer(typeof(List<T>), overrides); ser.Serialize(writer, list); } return xmlDoc; } 

Code used for verification:

 [TestFixture] public class BaseTesting { [Test] public void test() { List<ListTestClass> list = new List<ListTestClass>(); for (int i = 0; i < 20; i++) { list.Add(new ListTestClass() { intProp = 1, stringProp = "string1", dtProp = DateTime.Now }); } XmlDocument doc = Beyond.Base.Util.XMLUtils.SerializeToXML<ListTestClass>(list, "root"); } } public class ListTestClass { public int intProp { get; set; } public string stringProp { get; set; } public DateTime dtProp { get; set; } [XmlElement("Inner",typeof(InnerListTestClass))] public InnerListTestClass inner { get { return new InnerListTestClass() { intProp = 1, stringProp = "string1", dtProp = DateTime.Now }; } } } public class InnerListTestClass { public int intProp { get; set; } public string stringProp { get; set; } public DateTime dtProp { get; set; } } 

XML output:

 <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T09:43:35.1017998+01:00</dtProp> </ListTestClass> </root> 
+7
source share
1 answer

inner property must have a setter for serialization.

If you change it to

 public InnerListTestClass inner { get; set; } 

It will be serialized as you expect.

 <ListTestClass> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T01:57:07.1200742-07:00</dtProp> <Inner> <intProp>1</intProp> <stringProp>string1</stringProp> <dtProp>2011-06-07T01:57:07.1210743-07:00</dtProp> </Inner> </ListTestClass> 
+4
source

All Articles