Сериализация инкапсулированных списков в веб-сервисе - PullRequest
1 голос
/ 01 апреля 2011

У меня есть class MyClass, содержащий private List<MySecondClass> myList. Список выставляется через геттер следующим образом:

public IEnumerable<MySecondClass> MyList
{
    get { return myList.Select(a => a); }
}

Список изменяется с помощью открытых AddItem(MySecondClass itemToAdd) и ClearItems() методов. Я считаю, что это правильно составленный список.

Проблема заключается в том, что мне нужно передать объект типа MyClass (содержащий myList) через SOAP в веб-службу, которая заполняет myList (используя метод AddItem()), а затем возвращает объект.

Однако, когда веб-метод возвращает класс, после сериализации myList становится пустым. Я подозреваю, что это потому, что у меня нет установщика для myList, что приводит к тому, что список не будет установлен во время сериализации.

Это хорошее предположение или я ухожу? Если проблема в том, что я думаю, то есть ли способ разрешить успешную передачу списка из веб-метода, не нарушая инкапсуляцию (я не хочу раскрывать общий список)?

Ответы [ 3 ]

1 голос
/ 26 апреля 2011

Хотя я так и не решил первоначальную проблему, я сделал, чтобы она работала, чтобы упростить данные, передаваемые в веб-метод. Вместо того, чтобы передавать весь объект в веб-метод, я передал уникальный идентификатор. Затем веб-метод возвращает нужный мне список, и я обрабатываю фактическое добавление элементов в этом списке на стороне клиента.

1 голос
/ 01 апреля 2011

Не пытаясь сделать это непосредственно сам, я верю, что вы определенно можете быть правы.

Сериализация в .NET превращает использование свойств только для чтения в увлекательный цирк. Потому что процессу сериализации .net по умолчанию требуется свойство setter для "десериализации" объекта. Без свойства установщика часть сериализации будет работать, что позволит вам сериализовать на диск или по сети. Но это процесс десериализации, который потерпит неудачу, и это определенно может быть причиной того, что ваша коллекция пуста. Я просто поражен, если честно, это не ошибка.

Вы пытались добавить простой установщик, просто чтобы убедиться, что это на самом деле проблема, чтобы мы знали со 100% уверенностью, что это проблема, прежде чем работать над ее решением.

0 голосов
/ 16 апреля 2011

Сериализатор XML, используемый сервисами ASMX, сериализует только общедоступные свойства чтения / записи.

...