【问题标题】:How to serialize a List of custom object types如何序列化自定义对象类型列表
【发布时间】:2012-06-07 18:13:55
【问题描述】:

我有这样的课

public class Record
{
    public Int32 TotalTrail { get; set; }
    public TimeSpan MyTimeSpan { get; set; }
    public DateTime MyDateTime { get; set; }
}

我有一个列表来保存它的对象:

List<Record> _records;

那么当我想序列化列表时:

serializer.Serialize(stream, _records);

上面一行有运行时错误:

无法将 System.Collections.Generic.List`1[[SimpleGame.Record, SimpleGame, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 类型的对象分配给 SimpleGame.Record 类型的对象。

是因为我无法序列化列表吗?我该如何解决这个问题?

【问题讨论】:

标签: c# list serialization exception-handling xmlserializer


【解决方案1】:

您必须为 List&lt;Record&gt; 而不是 Record 类型创建序列化程序

【讨论】:

  • XmlSerializer 不需要 [Serializable]。不过,为列表类型创建序列化程序很好。
  • 我不确定,所以我把答案改成了更灵活的答案
  • 哦!没有意识到他是在专门谈论 XmlSerializer。
  • 我还没有机会添加如何创建 serizlizer,你已经猜到哪里出了问题!!非常感谢!这解决了我的问题。我很关注,现在我今天学到了一些东西!!!
【解决方案2】:

如果您想序列化为 XML,您甚至不需要实现可序列化。以下是将任何对象写入文件的快速简便方法:

Dim s As System.Xml.Serialization.XmlSerializer
Using fs As New IO.FileStream(thePath, FileMode.Create, FileAccess.Write, FileShare.Write)
    Using w As System.Xml.XmlTextWriter = New System.Xml.XmlTextWriter(fs, System.Text.Encoding.Default)
        s = New System.Xml.Serialization.XmlSerializer(GetType(T))
        w.Formatting = Xml.Formatting.Indented
        s.Serialize(w, m_objectToSerialize)
    End Using
End Using

【讨论】:

    【解决方案3】:

    我认为你需要指定你的对象是Serializable,下面是例子。

    [Serializable()]
    public class Record 
    { 
        public Int32 TotalTrail { get; set; } 
        public TimeSpan MyTimeSpan { get; set; } 
        public DateTime MyDateTime { get; set; } 
    }
    

    另一个溶胶

    你可以实现ISerializable接口

    public class Record : ISerializable
    { 
        public Int32 TotalTrail { get; set; } 
        public TimeSpan MyTimeSpan { get; set; } 
        public DateTime MyDateTime { get; set; } 
    }
    

    【讨论】:

    • 这些都不适用于 XmlSerializer
    • 好吧,最初他并没有说明他使用的是XMLSerializer
    • 标签处于初始版本(其他用户编辑之前)
    • 我猜这是一个菜鸟的错误......下次会更加小心......不过还是有用的信息,感谢您指出这一点。
    【解决方案4】:

    使您的课程可序列化...检查此链接。 http://msdn.microsoft.com/en-us/library/4abbf6k0.aspx

    【讨论】:

    • 这根本不适用于 XmlSerializer
    • 标签处于初始版本(其他用户编辑之前)
    【解决方案5】:

    我遇到了同样的问题: 我所做的是,我去了您为其创建列表的类并添加了一个无参数构造函数。我在某处读到序列化与无参数构造函数一起工作。一旦我这样做了。它就像一个魅力!希望它有效.. 像这样的

    public class InventoryType
    {
        public DateTime Date { get; set; }
        public int ID { get; set; }
        public string RoomT { get; set; }
        public int Quantity { get; set; }
    
        public InventoryType() { }
    
        public InventoryType(DateTime date, int id, string roomT, int quantity)
        {
    
            this.Date = date;
            this.ID = id;
            this.RoomT = roomT;
            this.Quantity = quantity;
        }
    
        public override string ToString()
        {           
            return "Date: " + Date + "\nID: " + ID + "\nRoom Type: " + RoomT + "\nQuantity: " + Quantity;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多