代码之家  ›  专栏  ›  技术社区  ›  Coppermill

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

  •  11
  • Coppermill  · 技术社区  · 16 年前

    [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);
                }
    

    “无法序列化成员 类型 mscorlib,版本=2.0.0.0, 文化=中性, PublicKeyToken=b77a5c561934e089]] 因为它是一个接口。”

    我知道你不能序列化一个接口。

    List<> 如果不是,为什么不呢?

    2 回复  |  直到 16 年前
        1
  •  9
  •   Greg Beech    16 年前

    一般来说,你应该使用 Collection<T> 如果您希望您的类的用户可以自由地修改它,或者 ReadOnlyCollection<T> 如果你没有。不建议使用 List<T> source ).

    XmlSerializer 所以你用什么并不重要。不过,我可能还是会坚持这些建议。

        2
  •  1
  •   James    16 年前

    如果您不介意列表可编辑,即公开添加/删除,则 List<> 那就好了。否则,您应该使用 ReadOnlyCollection

    推荐文章