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

时间:2012-06-03 06:17:44

标签: 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来保存它的对象:

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类型的对象。< / p>

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

5 个答案:

答案 0 :(得分:5)

您必须为List<Record>类型而不是Record

创建序列化程序

答案 1 :(得分:1)

如果要序列化为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

答案 2 :(得分:0)

我认为您需要指定您的对象为Serializable,以下是示例。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

var allowMessage = true;
function sendMessage(msg) {
    if (allowMessage) {
        //do something
        allowMessage = false;
        setTimeout(() => allowMessage = true, 1000);
    }
}