Я работаю над программой, которая использует Nhibernate для сохранения объектов и сериализацию Xml для импорта и экспорта данных. Я не могу использовать те же свойства для коллекций, что, например, Nhibernate требует, чтобы они были Ilists, потому что у него есть собственная реализация этого интерфейса, и я не могу сериализировать интерфейсы. Но так как мне нужно синхронизировать оба свойства, я подумал, что могу использовать два разных свойства для одного и того же поля. Свойства будут соответствовать тому, что мне нужно для каждого фреймворка, и они обновят поле соответствующим образом.
Итак, у меня есть следующее поле:
private IList<Modulo> modulos;
И следующие свойства:
[XmlIgnore]
public virtual IList<Modulo> Modulos
{
get { return modulos; }
set { modulos = value; }
}
[XmlArray]
[XmlArrayItem(typeof(Modulo))]
public virtual ArrayList XmlModulos
{
get
{
if (modulos == null) return new ArrayList();
var aux = new ArrayList();
foreach (Modulo m in modulos)
aux.Add(m);
return aux;
}
set
{
modulos = new List<Modulo>();
foreach (object o in value)
modulos.Add((Modulo)o);
}
}
Первый работает отлично, вполне стандартно, но у меня есть проблемы со вторым. Get работает отлично, так как у меня нет проблем с сериализацией объектов (это означает, что он правильно берет информацию из поля). Но когда мне нужно десериализовать, он не получает всю информацию. Отладчик сообщает, что после десериализации поле не обновляется (ноль), а свойство пусто (счет = 0).
Очевидным решением будет использование двух несвязанных свойств, по одному для каждой структуры, и передача информации вручную при необходимости. Но структура классов довольно сложна, и я думаю, что должен быть более простой способ сделать это.
Есть идеи, как я могу изменить свою собственность, чтобы она делала то, что я хочу? Любая помощь будет оценена.