Home > front end >  Problem during serialization with UNICODE char with System.Text.Json
Problem during serialization with UNICODE char with System.Text.Json

Time:02-05

I have a problem during the serialization with data modified during deserialization (i dont think its the problem )

some \u char are not correctly transformed...and i dont see how to fix that.. even with a global encoder....

See my comments about PROBLEM and NO PROBLEM

using System;
using System.Text.Encodings.Web;
using System.Text.Unicode;
using System.Text.Json;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;
using libaurore;

namespace partoo
{
    class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            var  client = new HttpClient();

            client.DefaultRequestHeaders.Clear();
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            client.DefaultRequestHeaders.Add("pe-id-environnement", "pe-id-environnement");
            client.DefaultRequestHeaders.Add("pe-id-correlation", "pe-id-correlation");
            client.DefaultRequestHeaders.Add("pe-id-utilisateur", "pe-id-utilisateur");
            client.DefaultRequestHeaders.Add("pe-nom-application", "pe-nom-application");

           
            
            var CodesAurore = await client.GetFromJsonAsync<List<RefAURORE>>("http://xx010-.pole-emploi.intra/v1/agences?horaire=true");
            Console.WriteLine(CodesAurore[500].NomAgence);
            //display: Pôle emploi - L'hay-Les-Roses            NO PROBLEM

            var encoderSettings = new TextEncoderSettings();
            //encoderSettings.AllowCharacters('\u0027'); dont fix....
            encoderSettings.AllowRange(UnicodeRanges.All);
            var options = new JsonSerializerOptions
            {
                Encoder = JavaScriptEncoder.Create(encoderSettings),
                WriteIndented = false
            }; 
            var ff = JsonSerializer.Serialize(CodesAurore[500], options);
            Console.WriteLine(ff); 
            //diplay:..,"libelle":"Pôle emploi - L\u0027hay-Les-Roses"     PROBLEM!!!

        }
    }
}

the class RefAURORE

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text.Json.Serialization;

namespace libaurore
{
    public static class Datas
    {
        public static TextInfo myTI = new CultureInfo("fr-FR", false).TextInfo;
        public static Dictionary<int, string> HJdico = new Dictionary<int, string> { 
    {0, "sunday"},{1, "monday"},{2, "tuesday"},{3, "wednesday"},{4, "thursday"},{5, "friday"},{6, "saturday"}};
    }

    public class RefAURORE
    {
        [DefaultValue("")]
        [JsonPropertyName(name: "code")]
        public string CodeAurore { get; set; }

        [DefaultValue("")]
        [JsonPropertyName(name: "type")]
        public string TypeAgence {
            get; set; }

        private string _NomAgence;
        [DefaultValue("")]
        [JsonPropertyName(name: "libelle")]
        public string NomAgence
        {
            get => _NomAgence;
            set
            {                
                _NomAgence = $"Pôle emploi - {Datas.myTI.ToTitleCase(value.ToLower())}";
                if( CodeAurore == "IDF0291")
                {
                      //display Pôle emploi - L'hay-Les-Roses.....NO PROBLEM
                    Console.WriteLine("***********");
                    Console.WriteLine(NomAgence);
                    Console.WriteLine("***********");
                }
            }          
        }
      :
      :

CodePudding user response:

Can you handle it with the below code?

var response = "Željko Cvijetić";
var jsonSerializerSettings = new JsonSerializerSettings {
    StringEscapeHandling = StringEscapeHandling.EscapeNonAscii
};
var json = JsonConvert.SerializeObject(response, jsonSerializerSettings);

And using System.Text.Json

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

var s = JsonSerializer.Serialize(response, JsonSetting);  
  •  Tags:  
  • Related