Webservice Сериализует IEnumerable Свойство - PullRequest
1 голос
/ 05 октября 2011

У меня довольно сложная проблема, которая беспокоила меня последние 2 дня.

Это мой класс:

public class MyClass: BaseEntity<int>
    {
        //Some other properties here...

        public virtual Categorie Categorie { get; set; }
        public virtual Bron Bron { get; set; }
        public virtual IEnumerable<Label> Labels { get; set; }
    }

Я вынужден использовать NHibernate. Итак, у меня закончено отображение, и IEnumerable не может быть List<T> (это может быть IList<T>). Но когда вы вызываете мой веб-сервис, он не может сериализовать мой IEnumerable, так как это интерфейс, и то же самое относится и к IList. И поскольку я использую nhibernate, я не могу изменить свой макет класса, насколько я знаю.

Итак, мой вопрос в основном таков: Могу ли я сказать Сериализатору, что он должен представлять угрозу как Список? Или есть универсальный класс коллекции, который будет сериализовывать метки и не разозлить nhibernate? Или что-нибудь еще, что будет работать?

1 Ответ

2 голосов
/ 05 октября 2011

Не совсем ответ на ваш вопрос, но, возможно, ответ на вашу проблему:)

Отправка объектов через границы процесса - не очень хорошая идея.Вместо этого вы должны проецировать свои объекты в DTO и отправлять их.

Если вы раскрываете структуру своих организаций в своем контракте на обслуживание, тогда ваши объекты связаны с каждым потребителем вашей услуги (Плохо).Если вы определяете контракт на обслуживание в терминах простых DTO, потребители будут зависеть только от них, а не от ваших организаций (Хорошо).

Проектирование объектов в DTO также может выполняться автоматически (с помощью автоматического оператора).

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

Если вы все еще хотите отправить сущность по проводам, чем, возможно, вы можете пометить свойство IEnumerable как не сериализуемое и использоватьдругое свойство типа массива, которое просто возвращает IEnumerable Property.ToArray () и не отображает свойство массива в NHibernate.

...