Сериализация в XML объект, содержащий IList

1

Поэтому у меня есть объект с именем FormType. Он содержит некоторые строки, булевы и т.д.

Но FormType также содержит следующее:

   private IList<FormTypeVersion> _versions = new List<FormTypeVersion>();

    public virtual IList<FormTypeVersion> Versions
    {
        get { return _versions; }
        set { _versions = value; }
    }

Вот почему я получаю эту ошибку:

{"Cannot serialize member 'Domain.FormType.Versions' of type 'System.Collections.Generic.IList'1

Кроме того - FormTypeVersion также содержит некоторые ILists.

Как я могу обойти эту ошибку, это происходит в этой строке:

var xm = new XmlSerializer(typeof(T));
Теги:
serialization

1 ответ

2
Лучший ответ

XmlSerializer не может десериализовать интерфейсы (если вы не хотите реализовать IXmlSerializable самостоятельно в объекте FormType). Вот почему вы видите это исключение.

Если вы измените свой IList на List, он должен работать, как в следующем примере:

[Serializable]
public class FormType
{
    private List<FormTypeVersion> _versions = new List<FormTypeVersion>();

    public virtual List<FormTypeVersion> Versions
    {
        get { return _versions; }
        set { _versions = value; }
    }
}

Если у вас нет роскоши изменить свой тип от IList до List, то самый чистый подход - реализовать IXmlSerializable. Существуют и другие решения, использующие абстрактные типы, отражение и подобные, но я бы не назвал это чистым.

  • 0
    попробует это, но не уверен, что это будет приемлемо - почему они определены как IList в первую очередь?
  • 0
    Это не вопрос для меня :) спросите, кто бы ни реализовал класс FormType. Есть много причин использовать или не использовать интерфейс в коде, это очень широкий вопрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню