Поэтому у меня есть объект с именем 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));
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
. Существуют и другие решения, использующие абстрактные типы, отражение и подобные, но я бы не назвал это чистым.