Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

168
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda