2012-06-03 3 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의 객체를 할당 할 수 없습니다, 문화 = 중립, PublicKeyToken = null]] SimpleGame.Record 유형의 객체에 전달합니다.

목록을 직렬화 할 수 없기 때문입니까? 이 문제를 어떻게 해결할 수 있습니까?

+4

어떻게 '시리얼 라이저'를 만드나요? – nemesv

+2

XmlSerializer가 TimeSpan을 잘못 처리합니다 (http://connect.microsoft.com/VisualStudio/feedback/details/386602/system-timespan-xml-serialization 참조). –

+1

serializer를 만드는 코드를 붙여 넣은 다음 해답을 읽을 수 있습니까? :) – ivowiblo

답변

5

당신은 나는이 같은 문제가 있었다 List<Record> 대신 Record

+3

[Serializable ]에 대한 XmlSerializer.목록 유형에 대한 serializer를 만드는 것은 괜찮습니다. –

+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

태그가 초기 버전에 있습니다 (다른 사용자가 편집하기 전) –

0

을 구현하는이 링크를 확인 할 수 있습니다. http://msdn.microsoft.com/en-us/library/4abbf6k0.aspx

+1

XmlSerializer 모두에 적용되지 않습니다. –

+0

@marc gravell : 그가 원하는 와트 직렬화를 언급하지 않았습니다 ... – Talha

+0

태그가 초기 버전입니다 (다른 사용자가 편집하기 전). –

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; 
    } 
} 
관련 문제