2012-06-03 161 views
2

我有这样如何序列化自定义对象类型的列表

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,版本= 1.0.0.0的对象,文化= neutral,PublicKeyToken = null]]添加到SimpleGame.Record类型的对象中。

是因为我无法序列化列表吗?我怎样才能解决这个问题?

+4

你如何创建'serializer'? – nemesv

+2

请注意,XmlSerializer错误地处理TimeSpan(请参阅http://connect.microsoft.com/VisualStudio/feedback/details/386602/system-timespan-xml-serialization,包括解决方法)。 –

+1

可以粘贴创建序列化程序的代码,然后阅读答案? :) – ivowiblo

回答

5

你必须创建串行为List<Record>,而不是Record

+3

你不需要[序列化]为XmlSerializer。尽管为列表类型创建序列化器很好。 –

+0

我不确定,所以我将答案更改为更灵活的一个 – ivowiblo

+1

哦!没有意识到他特别在谈论XmlSerializer。 – ivowiblo

0

我想你需要指定你的对象是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; } 
} 
+1

这些都不适用于XmlSerializer –

+1

好吧,最初他没有指定他使用'XMLSerializer' – Mayank

+1

标签是在初始版本(在由另一个用户编辑之前) –

1

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

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

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; 
    } 
} 
相关问题