C# 如何序列化自定义对象类型列表

C# 如何序列化自定义对象类型列表,c#,list,serialization,exception-handling,xmlserializer,C#,List,Serialization,Exception Handling,Xmlserializer,我有这样的课 public class Record { public Int32 TotalTrail { get; set; } public TimeSpan MyTimeSpan { get; set; } public DateTime MyDateTime { get; set; } } 我有一个列表来保存它的对象: List<Record> _records; List\u记录; 然后,当我要序列化列表时: 序列化(流,_记录) 上一行出现

我有这样的课

public class Record
{
    public Int32 TotalTrail { get; set; }
    public TimeSpan MyTimeSpan { get; set; }
    public DateTime MyDateTime { get; set; }
}
我有一个列表来保存它的对象:

List<Record> _records;
List\u记录;
然后,当我要序列化列表时:

序列化(流,_记录)

上一行出现运行时错误:

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


是因为我无法序列化列表吗?如何修复此问题?

我认为您需要指定对象是可序列化的,以下是示例

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

您可以实现
ISerializable
接口

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

使您的类可序列化。。。检查此链接

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

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

您必须为类型
列表创建序列化程序,而不是
记录

我遇到了同样的问题: 我所做的是,我去了一个你列出的类,并添加了一个无参数构造函数。我在某个地方读到,序列化可以使用无参数构造函数。有一次我这么做了。它就像一个符咒!希望它能奏效。。 像这样的

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

如何创建
序列化程序
?请注意,XmlSerializer不正确地处理时间跨度(请参阅,包括解决方法)。能否粘贴创建序列化程序的代码,然后读取答案?:)XmlSerializer不需要[Serializable]。但是,为列表类型创建序列化程序是可以的。我不确定,所以我将答案更改为更灵活的答案哦!我没有意识到他在专门谈论XmlSerializer。我还没有机会添加如何创建Serizizer,而你已经猜到了哪里出了问题!!谢谢!这解决了我的问题。我很注意,今天我学到了一些东西!!!这两个都不适用于XmlSerializerwell,最初他没有指定他使用的是
XMLSerializer
标记在初始版本中(在另一个用户编辑之前)。我想这是一个新手错误……下次会稍微小心一点……但仍然是有用的信息,感谢您指出这一点。这根本不适用于XmlSerializer标记在初始版本中(在其他用户编辑之前)