манипулирование объектами веб-сервиса asp.net - PullRequest
0 голосов
/ 11 апреля 2011

Возможно, не только для веб-сервисов, но ...

У меня есть веб-метод, который возвращает:

List<Tadpole> myList = getList();

return new { data = myList , count = 5 };

Возвращает это как JSON.

мой код проверяетmyList[x].fishsticks, который на самом деле не является частью класса Tadpole (так что это ошибки).Мне интересно, могу ли я как-нибудь добавить атрибут fishsticks к myList, чтобы избежать ошибки, чтобы он включался при возврате данных?

Возможно, есть другое элегантное решение для этого?

1 Ответ

2 голосов
/ 11 апреля 2011

В вашем примере вам нужно добавить свойство fishsticks к Tadpole.

public class Tadpole
{
    //....
    public int Fishsticks { get; set; } 
}

Кроме того, почему вы добавляете свойство .Count к своему типу JSON? Разве не имеет смысла просто .data.Count или просто вернуть список и полностью пропустить упаковщик?

Я не проверял, какие свойства List<> были сериализованы в последнее время, поэтому возможно, что он не включен, но даже в этом случае было бы разумнее сделать это:

List<Tadpole> myList = getList();

return new { data = myList , count = myList.Count };

Или создайте класс-потомок, который переопределяет .Count и добавляет атрибут сериализации.

Редактировать

Если я правильно помню, анонимные / динамические типы внутренне реализованы в виде словарей, а классы - нет. (Кстати, анонимные типы и динамические объекты приносят множество проблем производительности и обслуживания вместе с ними.)

Если вы по какой-то причине не хотите изменять Головастика, вы всегда можете создать класс-потомок:

public class HungryTadpole : TadPole
{
    public int FishSticks { get; set; } 
}

Строгий набор текста - ваш друг, и он спасет вас много головных болей в будущем.

...