Веб-сервис .NET XML и NHibernate: как работать со свойствами - PullRequest
1 голос
/ 09 ноября 2010

Моя библиотека доменов для базы данных, созданной с помощью nhibernate.Когда я создавал веб-сервис с библиотекой, я обнаружил много ошибок, связанных с невозможностью использования интерфейсов в моих классах DataContract.eq

[DataContract]
public class MyClass
{
    ... 
    [DataMember]
    public virtual IList<Item> Items {get;set;}
    ...
}

Далее я решил добавить несколько уловок: я добавил другое свойство с типом List:

[DataContract]
public class MyClass
{
    ...
    [XmlIgnore]
    public virtual IList<Item> prItems {get;set;}

    [DataMember]
    public virtual List<Item> Items {
        get{
            return this.prItems.ToList(); 
       }
       set{
           this.prItems = value;
       }
    }
    ...
}

это прекрасно работает - я могу получить список на моем клиенте, нокогда мне нужно изменить список элементов - это пусто на сервере, потому что клиент ничего не знает о prItems.Что вы можете посоветовать для меня?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2010

Вы не можете использовать экземпляры классов, которые загружаются с использованием NHibernate и содержат коллекции, поскольку NHibernate использует прокси-классы коллекции для отложенной загрузки, а прокси-классы коллекции NHibernate не сериализуемы.

Создайте отдельные классы DTO, которые вы используете в своихинтерфейс веб-службы.

0 голосов
/ 09 ноября 2010

Используйте вашу первоначальную попытку, но с дополнительным атрибутом:

[DataContract]
[KnownType(typeof(List<Item>))]
public class MyClass
{
    ... 
    [DataMember]
    public virtual IList<Item> Items {get;set;}
    ...
}

Дополнительная информация: http://msdn.microsoft.com/en-us/library/ms730167.aspx

Edit:

Обновлено KnownType до полного общего определения

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