C # Не удалось сериализовать класс с List <CustomObject>в качестве свойства - PullRequest
5 голосов
/ 22 января 2011

Привет Я пытаюсь сериализовать

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

}

Получение следующей ошибки: Произошла ошибка при отображении типа 'System.Collections.Generic.List`1 [DownloadTRON.Entities.Batche]'.

пытался это с последних 4 часов, может ли любое тело указать на то, что я делаю неправильно?

С уважением Pravin

Ответы [ 3 ]

4 голосов
/ 22 января 2011

Нет проблем с вашим кодом или сериализацией дженериков.Uri не имеет конструктора по умолчанию и не может быть сериализован.Попробуйте заменить его на строку, и все будет работать.Если вы планируете использовать только XmlSerializer, вы можете удалить атрибут Serializable, потому что он не используется.

Когда я запустил ваш код с помощью отладчика и увидел исключение, было внутреннее исключение с внутренним исключениемвнутреннее исключение и тд.Всегда хорошая идея следовать за этим кроликом, когда это возможно.

2 голосов
/ 30 марта 2011

Ваши собственные классы должны реализовать открытый конструктор без параметров, например, для класса Link вы должны реализовать дополнительный конструктор

public Link () {}

2 голосов
/ 22 января 2011

Вы должны передать дополнительные типы, которые есть в xml, в XmlSerializer, в вашем случае тип ссылки. Используйте это

XmlSerializer serializer = new XmlSerializer(typeof(List<Batche>), new Type[] {typeof(Link)});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...