2011-01-22 9 views
5

Hi Próbuję serializacjiC# Nie mogli serializacji klasy z listy <> CustomObject jako własność

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

} 

Uzyskiwanie następujący błąd: wystąpił błąd odzwierciedlających typu „System.Collections.Generic.List` 1 [Pobierz TRON.Entities.Batche] ".

próbowałem tego od ostatnich 4 godzin, może każdy organ zwrócić uwagę, co robię źle!

Pozdrowienia Pravin

+0

To może pomóc http: // stackoverflow. com/questions/1212742/xml-serialize-generic-list-of-serializable-objects – btlog

Odpowiedz

4

Nie ma problemu z kodem lub serializacji generyków. Uri nie ma domyślnego konstruktora i nie może być serializowany. Rozważ zmianę na ciąg i rzeczy będą działać. Jeśli planujesz używać tylko XmlSerializer, możesz usunąć atrybut Serializable, ponieważ nie jest on używany.

Kiedy uruchomiłem twój kod z debuggerem i zobaczyłem wyjątek, był wewnętrzny wyjątek z wewnętrznym wyjątkiem z wewnętrznym wyjątkiem i tak dalej. Zawsze dobrze jest podążać za królikiem w dół, kiedy tylko możesz.

+0

Dzięki, po prostu wymieniono Uri na string i zadziałało jak urok – Pravin

2

musiał przejść dodatkowe typy, które są w formacie XML, do XmlSerializer w swoim rodzaju przypadek Link. Użyj tej

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

Skopiowałem i wkleiłem ten kod do mojego programu testowego, który daje mi wyjątek InvalidOperationException. Po łańcuchu wewnętrznych wyjątków źródłem problemu jest nadal Uri bez domyślnego konstruktora. –

+0

Tak, mam rację, już chciałem to dodać. Powinien zastąpić Uri Stringiem. Należy również określić wszystkie dodatkowe typy, które są deserializowane poza partiami (w XtorSerializer ctor). –

2

własne klasy muszą wdrożyć publicznego konstruktora bez params, na przykład do klasy Łącze musisz zastosowanie dodatkowego konstruktor

link publicznego() {}

Powiązane problemy