Вручную измените тип коллекции ClientBase с Array [] на List <> - PullRequest
0 голосов
/ 08 октября 2009

Я использую свой собственный прокси WCF с ClientBase, я хочу сделать что-то вроде атрибута ct в утилите svc и сказать прокси вернуть тип коллекции List <>.

Я не могу использовать List <>, потому что сущности, управляемые nhibernate, поэтому я должен использовать IList

прокси не был создан с помощью svcutil .... я написал это сам.

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 09 октября 2009

К сожалению, когда объявленный тип в контракте является типом интерфейса, подобным IList, нет никакого способа контролировать, какой тип WCF будет фактически реализован (на практике это будет массив).

См. http://msdn.microsoft.com/en-us/library/aa347850.aspx:

"Во время десериализации, когда объявленный тип является интерфейсом, механизм сериализации выбирает тип, который реализует заявленный интерфейс, и создается экземпляр типа. Механизм известных типов (описанный в Известных типах контракта данных) не имеет эффект здесь; выбор типа встроен в WCF . "

0 голосов
/ 09 октября 2009

Вы должны быть в состоянии вручную исправить все ссылки в прокси от «массив» до «список» - по сути, просто утомительный поиск и замена.

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

private object[] myProperty
public List<object> MyProperty
{
    get
    {
        return p.ToList();
    }
    set
    {
        //initialise if necessary
        p = value.ToArray();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...