2016-02-02 2 views
1

Я знаю, что я могу установить и сделать все перечисления должны быть преобразованы в строки во время сериализации, как это (от JSON serialization of enum as string):Глобальной конфигурации Enum сериализации в строку игнорируются

var jsonFormatter = config.Formatters.JsonFormatter; 
jsonFormatter.SerializerSettings.Converters.Add(
    new StringEnumConverter 
    { 
     CamelCaseText = true 
    } 
); 

но мне кажется, что Global игнорировал во всех случаях я пробовал Dictionary<int,List<SomeEnum>>, Dictionary<int, SomeEnum>, List<SomeEnum> или даже SomeEnum!

Вот моя конфигурация:

public static class WebApiConfig 
    { 
     //https://stackoverflow.com/questions/9847564/how-do-i-get-asp-net-web-api-to-return-json-instead-of-xml-using-chrome/20556625#20556625 
     private class BrowserJsonFormatter : JsonMediaTypeFormatter 
     { 
      public BrowserJsonFormatter() 
      { 
       this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
      } 

      public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) 
      { 
       base.SetDefaultContentHeaders(type, headers, mediaType); 
       headers.ContentType = new MediaTypeHeaderValue("application/json"); 
      } 
     } 


     public static void Register(HttpConfiguration config) 
     { 
      // Web API routes 
      config.MapHttpAttributeRoutes(); 

      config.Formatters.Add(new BrowserJsonFormatter()); 



      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
      // DateTime Formatter 
      config.Formatters.JsonFormatter.SerializerSettings 
       .DateFormatString = "o"; 

      // enum Formatter to String 
      config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter()); 

     } 
    } 

Любая помощь приветствуется!

+1

Может быть, вам нужно удалить уже существующие форматировщик? См. Http://stackoverflow.com/questions/25224824/how-to-change-default-web-api-2-to-json-formatter, а также http://stackoverflow.com/questions/20191980/how-to- change-default-asp-net-mvc-web-api-media-formatter – dbc

+0

@dbc Когда я удаляю BrowserJsonFormatter, он генерирует исключения во всех сериализации - я попытался очистить все форматы без каких-либо результатов. –

+0

@dbc. предложил и изменил порядок сделал это! –

ответ

1

Как @dbc предложил, поместив config.Formatters.Clear() для предыдущих форматировщиков и изменив порядок - он заработал.

Вот окончательный код, который преобразует перечисления в строки в любом виде структур данных:

 public static void Register(HttpConfiguration config) 
     { 



      // Web API routes 
      config.MapHttpAttributeRoutes(); 

      config.Formatters.Clear(); 
      config.Formatters.Add(new BrowserJsonFormatter()); 

      //enum formatter as strings 
      config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter()); 

      // DateTime Formatter 
      config.Formatters.JsonFormatter.SerializerSettings 
       .DateFormatString = "o"; 


      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 




     }