Saltar al contenido

Newtonsoft.Json SerializeObject sin barras diagonales inversas de escape

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *