Mam obiekt, który przechowuje obiekt zdefiniowany jako IEnumerable, tj.
[Serializable]
[XmlRoot("MyObject")]
public class MyObject
{
[XmlAttribute]
public string Name { get; set; }
[XmlArrayAttribute("Numbers")]
public IEnumerable<string> Numbers { get; set; }
}
Kiedy uruchamiam XmlSerializer.Serialize względem obiektu, tj.
MyObject myObject = new MyObject() {
Name = "My Name" ,
Numbers= new List<string>(){"One", "Two"}
};
var xmlSerializer = XmlSerializer.FromTypes(new[]
{ typeof(MyObject) })[0];
using (var xmlWriter = XmlWriter.Create(@"MyObject.xml"))
{
if (xmlWriter != null) xmlSerializer.Serialize(xmlWriter, myObject);
}
dostaję
„Nie można serializować elementu członkowskiego SerializeObjects.MyObject.Numbers typu System.Collections.Generic.IEnumerable`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], ponieważ jest to interfejs.”
Rozumiem, że nie można serializować interfejsu.
A teraz pytanie:
Jaka jest najlepsza deklaracja dla „publicznych liczb IEnumerable { get; set; }”?
Czy powinienem użyć List<>
, jeśli nie, to dlaczego?