C# 序列化列表<;T>;包含列表<;T>;

C# 序列化列表<;T>;包含列表<;T>;,c#,.net,generics,serialization,xml-serialization,C#,.net,Generics,Serialization,Xml Serialization,我正在尝试序列化包含非系统类型的列表 下面是我的序列化代码,它在顶层运行良好。并返回一个有效的XmlDocument,但在内部列表中似乎不包含任何内容 我环顾了整个网络,但似乎什么也没找到 非常感谢您的帮助 代码: 公共静态XmlDocument序列化XML(列表,字符串根元素) { XmlAttributeOverrides overrides=新的XmlAttributeOverrides(); XmlAttributes attr=新的XmlAttributes(); attr.XmlRo

我正在尝试序列化包含非系统类型的列表

下面是我的序列化代码,它在顶层运行良好。并返回一个有效的XmlDocument,但在内部列表中似乎不包含任何内容

我环顾了整个网络,但似乎什么也没找到

非常感谢您的帮助

代码:

公共静态XmlDocument序列化XML(列表,字符串根元素) { XmlAttributeOverrides overrides=新的XmlAttributeOverrides(); XmlAttributes attr=新的XmlAttributes(); attr.XmlRoot=新的XmlRootAttribute(rootElement); 覆盖。添加(类型(列表),属性); XmlDocument xmlDoc=新的XmlDocument(); XPathNavigator nav=xmlDoc.CreateNavigator(); 使用(XmlWriter=nav.AppendChild()) { XmlSerializer ser=新的XmlSerializer(类型(列表),覆盖); 序列序列化(编写器、列表); } 返回xmlDoc; } 用于测试的代码:

[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; }
}
[TestFixture]
公共类基类测试
{
[测试]
公开无效测试()
{
列表=新列表();
对于(int i=0;i<20;i++)
{
添加(新的ListTestClass(){intProp=1,stringProp=“string1”,dtProp=DateTime.Now});
}
XmlDocument doc=Beyond.Base.Util.XMLUtils.SerializedXML(列表,“根”);
}
}
公共类ListTestClass
{
公共int intProp{get;set;}
公共字符串stringProp{get;set;}
公共日期时间dtProp{get;set;}
[XmlElement(“内部”,typeof(InnerListTestClass))]
公共InnerListTestClass内部{get{返回新的InnerListTestClass(){intProp=1,stringProp=“string1”,dtProp=DateTime.Now};}
}
公共类InnerListTestClass
{
公共int intProp{get;set;}
公共字符串stringProp{get;set;}
公共日期时间dtProp{get;set;}
}
XML输出:

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

1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00
1.
string1
2011-06-07T09:43:35.1017998+01:00

内部
属性必须具有setter才能序列化

如果你把它改成

public InnerListTestClass inner { get; set; }
它将被序列化,正如您所期望的那样

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

1.
string1
2011-06-07T01:57:07.1200742-07:00
1.
string1
2011-06-07T01:57:07.1210743-07:00
<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>