У меня есть объект, который содержит объект, который определен как IEnumerable, т.е.
[Serializable]
[XmlRoot("MyObject")]
public class MyObject
{
[XmlAttribute]
public string Name { get; set; }
[XmlArrayAttribute("Numbers")]
public IEnumerable<string> Numbers { get; set; }
}
Когда я запускаю XmlSerializer.Serialize для объекта, то есть
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);
}
Я получаю
"Невозможно сериализовать элемент
SerializeObjects.MyObject.Numbers of
тип
System.Collections.Generic.IEnumerable`1 [[System.String,
mscorlib, версия = 2.0.0.0,
Culture = нейтрально,
PublicKeyToken = b77a5c561934e089]]
потому что это интерфейс. "
Насколько я понимаю, вы не можете сериализовать интерфейс.
Теперь на вопрос:
Как лучше всего объявить "публичные IEnumerable Numbers {get; set;}"?
Должен ли я использовать List<>
, если нет, то почему бы и нет?