2012-05-18 23 views
5

tengo un diccionario que estoy usando la serialización de la serializador json.net, y actualmente está produciendoHacer diccionario Web API serializar con el valor clave como datos utilizando la clave de atributo

{"phrases":[{"Key":"my-key1","Value":"blah"},{"Key":"my-key2","Value":"blah2"}]} 

sin embargo yo quiero que la salida

{"phrases":["my-key1":"blah"},{"my-key2":"blah2"}]} 

mi modelo se parece

public class Phrases 
{ 
    public Dictionary<string, string> phrases; 
} 

¿existe un atributo de datos que pueda aplicarse a las frases modelo para hacer que esto suceda?

encontré la siguiente, pero no quieren volver a ser una cadena Serialize into a key-value dictionary with Json.Net?

ACTUALIZACIÓN:

les extiendo el controlador Web API de la siguiente manera, si uso JsonConvert.SerializeObject() Yo entiendo la serialización correcta, sin embargo, luego tendría una cadena para regresar.

public class PhraseController : ApiController 
    { 
     private IApplicationModel applicationModel; 

     public Phrases Get(string id) 
     { 
      var locale = new CultureInfo(id).LCID; 
      var phrases = applicationModel.Phrases.Where(x => x.Locale = locale).ToDictionary(x => x.Name, y => y.Value); 

      return new Phrases() { phrases = phrases }; 
     } 

     public PhraseController(IApplicationModel applicationModel) 
     { 
      this.applicationModel = applicationModel; 
     } 
    } 
+0

Qué versión json.net utiliza? Debido a que la versión de "Newtonsoft.Json" = "4.0.8" 'produce esto:' {"phrases": {"my-key1": "blah", "my-key2": "blah2"}} 'using' JsonConvert.SerializeObject (frases); ' – nemesv

+0

@nemesv ha actualizado mi pregunta – Tom

+1

Me pregunto si mi problema es que todavía está usando el DataContractJsonSerializer en lugar de json.net – Tom

Respuesta

2

Logré que funcionara al final.

El problema fue que todavía estaba usando el DataContractJsonSerializer. Agregué una línea para eliminar los formateadores antes de agregar el JsonNetFormatter y ahora se serializa correctamente.

GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.JsonFormatter); 

GlobalConfiguration.Configuration.Formatters.Add(new JsonNetFormatter(null)); 

(estoy usando la versión beta que todavía utiliza la DataContractJsonSerializer)

Cuestiones relacionadas