2015-02-24 6 views
0

ASP.NET API-вопрос для новичков.Сериализация пользовательских объектов в ASP.NET WEB API

У меня есть глупый веб-проект api, где нет модели, только один контроллер с методом get.

Метод get извлекает данные из внешней базы данных с использованием API-интерфейсов проприетарной объектной модели.

public class MyObjectController : ApiController 
{ 

    private static IList<MyObject> list = new List<MyObject>(); 


    private MyObjectCollection GetData() 
    { 
      return MyExternalDB.Query(); 
    } 

    // GET api/myobjects 
    public IEnumerable<MyObject> Get() 
    { 
     MyObjectCollection objcoll = GetData(); 
     IList<MyObject> list = objcoll.Cast<MyObject>().ToList(); 
     return list; 
    } 
} 

Проблема: Теперь проект строится без ошибок, но когда я пытаюсь отлаживать с помощью IE URL-адрес API/myobjects и результатов загрузки в формате JSON, то IE не удается сказать «файл не может быть загружен».

Я подозреваю, что объект неправильно сериализуется в json. Использование пакета Web Api Трассировка Я вижу следующее исключение

Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'Project' with type ... 

Вопросы

  • MyObject не зависит от модели и на основе пользовательского типа, определенного в отдельном API. Должен ли я ожидать, что сериализатор будет работать нормально и преобразовать мой объект в json (если не будет проблема цикла sel-referencing)?
  • Как я могу обработать MyObject, избавившись от свойств самореференции, чтобы он мог быть правильно сериализован для ответа json?
+0

_ «Я подозреваю, что объект неправильно сериализуется в json» _ - или вы используете неправильный инструмент для тестирования API. Попробуйте [Fiddler] (http://www.telerik.com/fiddler) вместо IE. – CodeCaster

ответ

0

Попробуйте добавить

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 

к вашему App_Start/WebApiConfig.cs класса

Это должно заставить его, но, как комментировал вы действительно должны быть тестирования API путем создания надлежащего запроса. Есть несколько инструментов:

Postman (Chrome плагин)
Fiddler

В приложениях, вероятно, будет создать запрос и указать тип данных и обрабатывать его, так что вы должны имитировать, что с одним из выше инструменты.

+0

Я перестал использовать упоминаемый вами 2 (ну, скрипач по-прежнему будет полезен для других целей) после того, как он перейдет через расширенный клиент REST Google. – Veverke

+0

Сладкий, я дам этот выстрел! – nik0lias

Смежные вопросы