Преобразование списка в массив для [WebMethod]

Я понимаю, что вы не можете вернуть общий список в стандартном веб-сервисе .asmx. Однако я считаю, что вы можете вернуть массив []. Моя проблема заключается в преобразовании списка в массив. Кто-нибудь может помочь? У меня есть куча бизнес-объектов, которые уже возвращают список типов, поэтому я не готов преобразовывать исходные объекты в массивы...

Вот мой веб-метод.

   [WebMethod]

    public Book[] GetBooksList()

    {

        List<Book> obj = new List<Book>();
        BookDA dataAccess = new BookDA();       

        obj = dataAccess.GetBooksAll().ToArray(); //error 1 here on conversion

    return obj; //error 2 here

    }  

Ошибка, которую я получаю, является 2-кратной: невозможно неявно преобразовать тип BookDTO.Book [] в GenericList

Невозможно неявно преобразовать тип GenericList в


person midnightCoder    schedule 05.01.2012    source источник
comment
Возможный дубликат: stackoverflow.com/questions/4093754/   -  person Didaxis    schedule 05.01.2012


Ответы (1)


Потому что вы уже объявили, что obj — это список, а не массив. Попробуйте это вместо этого:

[WebMethod]
public Book[] GetBooksList()
{
    BookDA dataAccess = new BookDA();

    List<Book> obj = dataAccess.GetBooksAll();

    return obj.ToArray();
}

Или еще лучше:

[WebMethod]
public Book[] GetBooksList()
{
    var dataAccess = new BookDA();

    var obj = dataAccess.GetBooksAll().ToArray();

    return obj;
}
person Didaxis    schedule 05.01.2012
comment
Я попробовал ваше первое предложение return obj.ToArray(); и я получаю сообщение об ошибке не в этой строке, а в строке obj = dataAccess.GetBooksAll() -> Невозможно неявно преобразовать тип «Generic.List‹BookDTO.Book›» в «Generic.List ‹BookService.Book›» - person midnightCoder; 05.01.2012
comment
Ну, это ваша проблема. BookDTO.Book — это не то же самое, что BookService.Book. Вам нужно будет выпрямить это в первую очередь. - person Didaxis; 05.01.2012
comment
Хм. В моем консольном приложении работает нормально, но в файле .asmx.cs я получаю сообщение об ошибке Не удается неявно преобразовать тип «Generic.List‹BookDTO.Book›» в «Generic.List ‹BookService.Book›». Должно быть что-то такое простое, но не могу найти. Любые идеи у кого-нибудь?? - person midnightCoder; 05.01.2012
comment
Ок разобрался. Мое имя службы было таким же, как и мой объект. Поэтому, если кому-то нужно вернуть Array [] в веб-сервисе из списка, используйте return obj.ToArray(); оно работает! - person midnightCoder; 05.01.2012
comment
Разве это не то же самое, что и первое предложение в моем ответе? Абсолютно ваша проблема заключалась в конфликте имен между BookDTO.Book и BookService.Book, на что я указал в своем комментарии. Вот почему вы должны правильно отделить свои бизнес-объекты в отдельную сборку от любого клиентского кода (например, вашего консольного приложения или вашего веб-приложения). Не говоря уже о том, что если у вас действительно есть тип DTO, вы ДОЛЖНЫ возвращать его из своего WebMethod, а не бизнес-объект из вашей модели предметной области. - person Didaxis; 05.01.2012
comment
Да вы правы. Моё бо в отдельной сборке. Спасибо ErOx! - person midnightCoder; 05.01.2012