Serialization 使用xmlSerializer序列化对象。序列化和IEnumerable对象
我有一个对象,它包含一个定义为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; } } [可序
[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
之外没有其他使用者,因此使用什么并不重要。不过,我可能仍然坚持这些建议