2011-01-22 21 views
5

Hi Tôi cố gắng để serializeC# Không thể serialize lớp với List <CustomObject> là tài sản

FileStream fileStream = new FileStream("batches.xml", FileMode.Open); 
XmlSerializer serializer = new XmlSerializer(typeof(List<Batche>)); 
List<Batche> listOfBatches = new List<Batche>(); 

[Serializable] 
[XmlRoot("Batch")] 
public class Batche 
{ 

    [XmlElement("Title")] 
    public string Title 
    { 
     get;set; 
    } 

    [XmlArray("ListOfLinks"),XmlArrayItem("Link",Type = typeof(Link))] 
    public List<Link> Links 
    { 
     get;set; 
    } 
} 

[Serializable] 
[XmlRoot("Link")] 
public class Link 
{ 
    [XmlElement("Uri")] 
    public Uri Uri 
    { 
     get; 
     set; 
    } 

    [XmlElement("Status")] 
    public string Status 
    { 
     get; 
     set; 
    } 

} 

Bắt lỗi sau: Có lỗi khi phản ánh gõ 'System.Collections.Generic.List` 1 [DownloadTRON.Entities.Batche] '.

đã cố gắng điều này kể từ 4 giờ qua, bất kỳ cơ thể nào có thể chỉ ra những gì tôi đang làm sai!

Trân Pravin

+0

này có thể giúp http: // stackoverflow. com/questions/1212742/xml-serialize-generic-list-of-serializable-đối tượng – btlog

Trả lời

4

Không có vấn đề với mã của bạn hoặc serialization của Generics. Uri không có một hàm tạo mặc định và không thể được tuần tự hóa. Xem xét việc thay đổi nó thành một chuỗi và mọi thứ sẽ hoạt động. Nếu bạn chỉ có kế hoạch sử dụng XmlSerializer, bạn có thể loại bỏ thuộc tính Serializable vì nó không được sử dụng.

Khi tôi chạy mã của bạn bằng trình gỡ rối và thấy ngoại lệ, có một ngoại lệ bên trong với ngoại lệ bên trong với ngoại lệ bên trong, v.v. Luôn luôn là một ý tưởng tốt để làm theo đó thỏ xuống lỗ khi bạn có thể.

+0

Cảm ơn, chỉ cần thay thế Uri bằng chuỗi và nó đã làm việc thích một sự quyến rũ – Pravin

2

Bạn phải vượt qua các loại bổ sung mà là trong xml, để XmlSerializer, trong loại trường hợp liên kết của bạn. Sử dụng này

XmlSerializer serializer = new XmlSerializer(typeof(List<Batche>), new Type[] {typeof(Link)}); 
+0

Sao chép và dán mã này vào chương trình thử nghiệm của tôi và nó mang lại cho tôi một InvalidOperationException. Theo chuỗi các ngoại lệ bên trong, gốc của vấn đề vẫn là Uri không có một hàm tạo mặc định. –

+0

Vâng, tôi sắp sửa tự thêm vào. Anh ta nên thay thế Uri bằng một String. Và cũng phải chỉ định tất cả các loại bổ sung đang được deserialized ngoài các lô (trong XmlSerializer ctor). –

2

lớp riêng của bạn phải thực hiện một constructor nào không có params, ví dụ cho lớp liên kết bạn phải thực hiện một constructor thêm

công Link() {}

Các vấn đề liên quan