JSON.NET Parser * parece * ser una serialización doble de mis objetos

Mi problema es este:

Esta es la respuesta enviada desde mi controlador WebAPI.

"[ [ {\"id\":\"identifier\"}, {\"name\":\"foobar\"} ] ]" 

Tenga en cuenta que la respuesta se envuelve en citas y todas las citas incrustadas se escapan. Esto es obviamente un problema. ¿Hay alguna configuración que pueda proporcionar al Serializador JSON.NET para evitar que esto ocurra?

Editar

Como suponía pswg en su respuesta, estaba usando JSON.NET

 JsonConvert.SerializeObject(instance) 

para realizar mi serialización.

Hice esto porque mientras construía mis convertidores personalizados, los había incluido en JsonConvert.DefaultSettings dentro de mi WepApiConfig (y obviamente pensé que esto no sería un problema)

Anteriormente había intentado cambiar el tipo de retorno de mis HttpGets a “mi tipo de objeto” y la respuesta fue una representación json del método ToString () de mi objeto … que me hizo saber que la serialización no estaba pasando por mis conversores.

Cambiar el tipo de retorno de mis HttpGets desde la cadena a “mi tipo de objeto” y conectar esos convertidores directamente a HttpConfiguration por defecto de WebAPi hizo el truco.

 config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new FooConverter()); config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new BarConverter()); 

Pan comido.

Probablemente tengas algo como esto:

 public string GetFoobars() { var foobars = ... return JsonConvert.SerializeObject(foobars); } 

En este caso, está serializando el objeto en cadena con Json.NET, luego al devolver el resultado como una cadena, el controlador API serializará la cadena como un literal de cadena de JavaScript, lo que hará que la cadena se envuelva entre comillas dobles. y hacer que otros caracteres especiales dentro de la cadena escapen con una barra diagonal inversa.

La solución es simplemente devolver los objetos por sí solos:

 public IEnumerable GetFoobars() { var foobars = ... return foobars; } 

Esto hará que el controlador API serialice los objetos usando su configuración predeterminada, lo que significa que serializará el resultado como XML o JSON dependiendo de los parámetros que ingrese desde el cliente.

Otras lecturas

  • Serialización JSON y XML en ASP.NET Web API