我有一个C#.NET 3.5应用程序,我想将包含List<>
的类序列化为XML。我的阶级是这样的:序列化导出为ICollection <>到XML的List <>
[XmlRoot("Foo")]
class Foo
{
private List<Bar> bar_ = new List<Bar>();
private string something_ = "My String";
[XmlElement("Something")]
public string Something { get { return something_; } }
[XmlElement("Bar")]
public ICollection<Bar> Bars
{
get { return bar_; }
}
}
如果我填充它是这样的:
Bar b1 = new Bar();
// populate b1 with interesting data
Bar b2 = new Bar();
// populate b2 with interesting data
Foo f = new Foo();
f.Bars.Add(b1);
f.Bars.Add(b2);
然后序列化这样的:
using (System.IO.TextWriter textWriter = new System.IO.StreamWriter(@"C:\foo.xml"))
{
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Foo));
serializer.Serialize(textWriter, f);
}
我得到类似如下的文件:
<Foo>
<Something>My String</Something>
</Foo>
但是,我想要的是X ML看起来像这样:
<Foo>
<Something>My String</Something>
<Bar>
<!-- Data from first Bar -->
</Bar>
<Bar>
<!-- Data from second Bar -->
</Bar>
</Foo>
什么我需要做的就是将List<>
出现在XML?
我不相信你可以'XmlSerialize'的接口。你为什么要序列化为'ICollection'呢?序列化为'List'并返回给消费者一个'ICollection '...... ??? –
IAbstract
@IAbstract - 我不确定我是否理解。你的意思是用'[XmlElement(“Bar”)]'标记标记'私人列表 bar_'吗?这不会改变输出。另外,'XmlSerializer'文档建议它可以同时处理IEnumerable和ICollection接口。 http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer%28v=VS.90%29.aspx –
PaulH
我认为IAbstract有它 - 你不能序列化的接口。所以相反,你应该改变Foo,以便Bars是一个列表,而不是ICollection –