Могу ли я указать сериализатору WCAP WebAPI игнорировать вложенные объекты класса? - PullRequest
4 голосов
/ 05 августа 2011

Я использую WCF WebAPI для написания служб REST с использованием WCF. Я возвращаю мои классы POCO как объекты json / xml из моего сервиса. Большинство моих классов POCO содержат ICollection s, так как они являются частью EF4.1 Code First, следовательно я получаю ошибку:

Невозможно сериализовать член типа ... System.Collections.Generic.ICollection ... потому что он имеет тип - потому что это интерфейс

Во избежание того, что XMLIgnore и ScriptIgnore являются предлагаемыми . И есть некоторые проблемы в пользовательской сериализации JSON в WCF .

Просто подумал, что кто-то мог столкнуться с подобной проблемой и иметь лучшее решение или способ настроить классы сериализации, в противном случае мне придется украшать каждый такой атрибут с помощью XMLIgnore и т. Д.

Ответы [ 4 ]

3 голосов
/ 08 августа 2011

Чаще всего вы, вероятно, использовали бы DTO или (просмотр моделей в ASP.NET MVC) для отделения от вашей доменной модели.И вы можете использовать AutoMapper, чтобы минимизировать конвертацию кода между моделями доменов и DTO.

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

Вы должны добавить [XmlIgnore] и [IgnoreDataMember]. Тогда свойство будет игнорироваться для ответов xml и json.

1 голос
/ 29 ноября 2011

То же самое нужно, Сандро, [IgnoreDataMember] и [XmlIgnore].

Немного больше объяснений: [IgnoreDataMember] необходимо для исключения поля в сериализации json, [XmlIgnore] необходимо для исключенияполе в сериализации xml.

0 голосов
/ 06 августа 2011

Я обнаружил, что в WCF WebAPI [ScriptIgnore] или [JsonIgnore] не работают и не имеют никакого эффекта, поэтому я возвращаюсь к ASP.NET MVC для API-интерфейсов REST, связанных с json.

Обновление [24 июля 2012 г.] Этот ответ устарел, и с тех пор Microsfot WebAPI прошел большой путь, пожалуйста, проверьте, прежде чем полагаться на этот ответ.

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