簡體   English   中英

使用 System.Text.Json 的 UNICODE 字符序列化期間出現問題

[英]Problem during serialization with UNICODE char with System.Text.Json

我在反序列化期間修改了數據的序列化過程中遇到了問題(我認為不是問題)

一些 \u char 沒有正確轉換......我不知道如何解決這個問題......即使使用全局編碼器......

請參閱我關於問題和沒有問題的評論

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!!!

        }
    }
}

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("***********");
                }
            }          
        }
      :
      :

你能用下面的代碼處理它嗎?

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

並使用System.Text.Json

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

var s = JsonSerializer.Serialize(response, JsonSetting);  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM