我有一個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 –