Solución:
Si esto le sucede mientras devuelve el valor de un método WebApi, intente devolver el objeto en sí, en lugar de serializar el objeto y devolver la cadena json. WebApi serializará objetos a json en la respuesta de forma predeterminada; si devuelve una cadena, escapará de las comillas dobles que encuentre.
Entonces en lugar de:
public string Get()
{
ExpandoObject foo = new ExpandoObject();
foo.Bar = "something";
string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo);
return json;
}
Tratar:
public ExpandoObject Get()
{
ExpandoObject foo = new ExpandoObject();
foo.Bar = "something";
return foo;
}
Lo que ves en el depurador cuando miras el json
valor es el valor de cadena que debe usar en un archivo C # para obtener el mismo valor.
De hecho, podrías reemplazar
dynamic foo = new ExpandoObject();
foo.Bar = "something";
string json = Newtonsoft.Json.JsonConvert.SerializeObject(foo);
con
string json = "{"Bar":"something"}";
sin cambiar el comportamiento del programa.
Por lo tanto, para obtener un valor diferente, debe cambiar el funcionamiento de JsonConvert, pero JsonConvert cumple con el estándar JSON, ¡así que olvídelo!
Si en realidad no está serializando ExpandoObject (ni ninguna otra clase sellada fuera de su control), puede usar DebuggerDisplayAttribute en los tipos que está serializando en json, para definir cómo se mostrará el objeto durante la depuración (en su código, el foo
ejemplo).
Pero una cadena es una cadena y VisualStudio tiene razón: las comillas dobles deben ser de escape.
Antigua pregunta pero encontré esto
En mi caso, estaba mirando la cadena JSON en un depurador y descubrí que estaba agregando el escape.
Y cuando imprimí JSON en la consola, no tenía caracteres de escape. Espero eso ayude.