XML-сериализация интерфейса - PullRequest
2 голосов
/ 18 октября 2010

У меня проблема с тем, что я работаю в проекте nHibernate, который имеет следующий объект:

[Serializable]
public class Prototype
{
    public virtual long Id { get; private set; }
    public virtual string Name { get; set; }   
    public virtual IList<AttributeGroup> AttributeGroups { get; private set; }
}

Я создал метод десериализации файла XML и поместил его в объект типа Prototypeследующим образом:

public static T Deserialize(string fileName)
{
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
    XmlTextReader xmlTextReader = new XmlTextReader(fileName);
    Object c = xmlSerializer.Deserialize(xmlTextReader);
    return (T)c;
}

Проблема в том, что у меня есть следующее исключение:

Unable to cast object of type 'NHibernate.Collection.Generic.PersistentGenericBag`1[BCatalog.Entities.AttributeGroup]' to type 'System.Collections.Generic.List`1[BCatalog.Entities.AttributeGroup]'.

Я не могу изменить тип IList из-за nHibernate ихочу десериализовать объект.

Что я должен сделать, чтобы решить эту проблему?

1 Ответ

0 голосов
/ 22 июня 2011

Интерфейсы кажутся громоздкими для процессов сериализации / десериализации.Возможно, вам потребуется добавить еще один открытый член в класс, который использует конкретный тип, и пометить свойство интерфейса как xml ignore.Таким образом, вы можете десериализовать объект без потери базы контрактов.

Что-то вроде следующего:

[Serializable]
public class Prototype
{
    public virtual long Id { get; private set; }
    public virtual string Name { get; set; }   
    [XMLIgnore]
    public virtual IList<AttributeGroup> AttributeGroups { 
        get { return this.AttributeGroupsList; } 
    }
    public virtual List<AttributeGroup> AttributeGroupsList { get; private set;}
}

Для получения дополнительной информации об атрибутах десериализации, пожалуйста, проверьте Свойства XmlAttributes .

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...