Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

287
Vistas
dotnet core System.Text.Json unescape cadena unicode

Usar JsonSerializer.Serialize(obj) producirá una cadena con escape, pero quiero la versión sin escape. Por ejemplo:

 using System; using System.Text.Json; public class Program { public static void Main() { var a = new A{Name = "你好"}; var s = JsonSerializer.Serialize(a); Console.WriteLine(s); } } class A { public string Name {get; set;} }

producirá una cadena {"Name":"\u4F60\u597D"} pero quiero {"Name":"你好"}

Creé un fragmento de código en https://dotnetfiddle.net/w73vnO
Por favor, ayúdame.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Debe configurar las opciones de JsonSerializer para no codificar esas cadenas.

 JsonSerializerOptions jso = new JsonSerializerOptions(); jso.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping;

Luego pasa estas opciones cuando llama a su método Serialize .

 var s = JsonSerializer.Serialize(a, jso);

Código completo:

 JsonSerializerOptions jso = new JsonSerializerOptions(); jso.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping; var a = new A { Name = "你好" }; var s = JsonSerializer.Serialize(a, jso); Console.WriteLine(s);

Resultado:

ingrese la descripción de la imagen aquí

Si necesita imprimir el resultado en la consola, es posible que deba instalar un idioma adicional. Consulte aquí .

over 4 years ago · Santiago Trujillo Denunciar

0

Para cambiar el comportamiento de escape de JsonSerializer , puede pasar un JavascriptEncoder personalizado a JsonSerializer configurando la propiedad Encoder en JsonSerializerOptions .

https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions.encoder?view=netcore-3.0#System_Text_Json_JsonSerializerOptions_Encoder

El comportamiento predeterminado está diseñado teniendo en cuenta la seguridad y JsonSerializer se escapa para una defensa en profundidad.

Si todo lo que está buscando es escapar de ciertos caracteres "alfanuméricos" de un idioma no latino específico, le recomendaría que, en su lugar, cree un JavascriptEncoder usando el método Create factory en lugar de usar el codificador UnsafeRelaxedJsonEscaping .

 JsonSerializerOptions options = new JsonSerializerOptions { Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.CjkUnifiedIdeographs) }; var a = new A { Name = "你好" }; var s = JsonSerializer.Serialize(a, options); Console.WriteLine(s);

Si lo hace, mantiene ciertas salvaguardas, por ejemplo, los caracteres sensibles a HTML seguirán siendo escapados.

Yo advertiría contra el uso de System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping con ligereza ya que hace un escape mínimo (por eso tiene "inseguro" en el nombre). Si el JSON que está creando está escrito en un archivo codificado en UTF-8 en el disco o si es parte de una solicitud web que establece explícitamente el conjunto de caracteres en utf-8 (y no se va a incrustar potencialmente en un componente HTML tal cual), entonces probablemente esté bien usar esto.

Consulte la sección de comentarios dentro de los documentos de la API: https://docs.microsoft.com/en-us/dotnet/api/system.text.encodings.web.javascriptencoder.unsaferelaxedjsonescaping?view=netcore-3.0#remarks

También podría considerar especificar UnicodeRanges.All si espera/necesita que todos los idiomas permanezcan sin escapar. Esto aún escapa a ciertos caracteres ASCII que son propensos a vulnerabilidades de seguridad.

 JsonSerializerOptions options = new JsonSerializerOptions { Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) };

Para obtener más información y ejemplos de código, consulte : https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?view=netcore-3.0#customize-character-encoding

Consulte la nota de precaución

over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar: System.Text.RegularExpressions.Regex.Unescape(string) para quitar el escape de los caracteres Unicode. https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex.unescape

Ejemplo de actualización de la pregunta original:

 using System; using System.Text.Json; public class Program { public static void Main() { var a = new A{Name = "你好"}; var s = JsonSerializer.Serialize(a); var unescaped = System.Text.RegularExpressions.Regex.Unescape(s); Console.WriteLine(s); Console.WriteLine(unescaped); } } class A { public string Name {get; set;} }

Producción:

 {"Name":"\u4F60\u597D"} {"Name":"你好"}
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda