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);