2015-01-14 3 views
0

У меня есть проект Web API 2 и мой WebApiConfig выглядит следующим образом:Как реализовать форматирование MongoDB Bson в Web API 2?

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config 
      .MapHttpAttributeRoutes(); 


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

Это прекрасно работает, но я хочу, чтобы JSON должен быть проанализирован «Монго DB стиль», таким образом автоматически получить сериализации ObjectIds, так что я могу используйте атрибуты типа [BsonElement("name")] для свойств в моих классах моделей и т. д.

Я огляделся и нашел эту статью http://odetocode.com/blogs/scott/archive/2013/09/30/custom-serialization-with-json-net-webapi-and-bsondocument.aspx, но, похоже, немного устарел, и я не могу заставить его работать.

Я довольно застрял на данный момент, очень ценю.

ответ

1

Вам необходимо реализовать и зарегистрировать настраиваемый медиаформат. В принципе, вам нужно сделать, это:

  • вывести класс из MediaTypeFormatter (асинхронное чтение/выполнение записи) или BufferedMediaTypeFormatter (синхронное чтение/запись реализация)
    • объявить поддерживаемый MIME тип для формата BSON в классе конструктор
    • осуществить CanWriteType + WriteToStream и/или CanreadType + ReadFromStream
  • зарегистрировать класс медиа форматтера в конфигурации Web API

Примите во внимание, что форматировщик будет использоваться:

  • для анализа полученных данных, когда формат носителя указан в Content-Type заголовке (это чтение частью реализации)
  • сериализовать возвращенный объект, когда формат носитель задаются Accept заголовка (это запись часть реализации)

Вы можете посмотреть на эти образцы, или Google для "Web API пользовательских медиа форматтеров", чтобы получить более подробную информацию и образцы:

+0

Хорошо, спасибо. Это хорошие указатели. Но вы нашли существующую реализацию? Достаточно много, но ничего не придумал. Я не могу быть первым, кому это нужно ... =) –

+0

Я не знаю никакой реализации. Тем не менее, существует exisintg реализация BSON (de) serializer: http://docs.mongodb.org/ecosystem/tutorial/serialize-documents-with-the-csharp-driver/. Если вы используете его, реализация вашего пользовательского форматирования почти тривиально. – JotaBe

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