Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

276
Views
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
4 answers
Answer question

0

Puede usar: System.Text.RegularExpressions.Regex.Unescape(string) para recuperar 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 Report

0

Utilizar:

 JsonSerializerOptions options = new JsonSerializerOptions { Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) };
over 4 years ago · Santiago Trujillo Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!