Serialization 使用xmlSerializer序列化对象。序列化和IEnumerable对象

Serialization 使用xmlSerializer序列化对象。序列化和IEnumerable对象,serialization,interface,Serialization,Interface,我有一个对象,它包含一个定义为IEnumerable的对象,即 [Serializable] [XmlRoot("MyObject")] public class MyObject { [XmlAttribute] public string Name { get; set; } [XmlArrayAttribute("Numbers")] public IEnumerable<string> Numbers { get; set; } } [可序

我有一个对象,它包含一个定义为IEnumerable的对象,即

[Serializable]
[XmlRoot("MyObject")]
public class MyObject
{
    [XmlAttribute]
    public string Name { get; set; }

    [XmlArrayAttribute("Numbers")]
    public IEnumerable<string> Numbers { get; set; }
}
[可序列化]
[XmlRoot(“MyObject”)]
公共类MyObject
{
[XmlAttribute]
公共字符串名称{get;set;}
[XmlArrayAttribute(“数字”)]
公共IEnumerable数{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);
            }
MyObject MyObject=new MyObject(){
Name=“我的名字”,
数字=新列表(){“一”,“二”}
};
var xmlSerializer=xmlSerializer.FromTypes(新[]
{typeof(MyObject)}[0];
使用(var xmlWriter=xmlWriter.Create(@“MyObject.xml”))
{
if(xmlWriter!=null)xmlSerializer.Serialize(xmlWriter,myObject);
}
我明白了

“无法序列化成员 SerializeObjects.MyObject.Number of 类型 System.Collections.Generic.IEnumerable`1[[System.String, mscorlib,版本=2.0.0.0, 文化=中立, PublicKeyToken=b77a5c561934e089]] 因为它是一个接口。”

我知道你不能序列化接口

现在回答问题:

“公共IEnumerable Numbers{get;set;}”的最佳声明是什么


我是否应该使用
列表
,如果不是,为什么不可以?

如果您不介意列表可编辑,即公开添加/删除,那么
列表
就可以了。否则,您应该使用
ReadOnlyCollection
一般来说,如果您希望类的用户可以自由修改它,您应该使用
Collection
,如果您不想修改它,您应该使用
ReadOnlyCollection
。不建议在公共界面()中使用
List

但是,由于该类用于XML序列化,因此除了将XML表示为对象模型之外,它不可能用于任何其他目的,因此这些规则的应用方式与“普通”API的应用方式并不相同,因为它除了
XmlSerializer
之外没有其他使用者,因此使用什么并不重要。不过,我可能仍然坚持这些建议