2011-06-07 11 views
7

Sistem dışı türleri içeren bir listeyi serileştirmeye çalışıyorum.Seri Numarası Listeleme <T> Listenin içeriği <T>

Aşağıda, en üst düzeyde iyi çalışan seri hale getirme kodum var. ve geçerli bir XmlDocument döndürür, ancak bir iç listede herhangi bir şey içermiyor gibi görünüyor.

Ağa ve etraftaki SO'ya baktım - ama hiçbir şey bulamıyor gibi görünüyor!

Herhangi bir yardım çok takdir edilmektedir.

Kod: Test için kullanılan

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; 
} 

Kodu:

[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 Çıktı:

<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> 

cevap

4

inner mülkiyet seri olabilmesi için ayarlayıcı olması gerekir.

Eğer bunu bekliyoruz gibi, tefrika edilecek

public InnerListTestClass inner { get; set; } 

bunu değiştirin.

<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> 
+0

Brilliant! Bu mükemmel çalışıyor. –

İlgili konular