Сериализация JSON выводится в UTF-8 коде

Код:

class Dictinory
    {
        public string Arab { get; set; }
        public string Rus { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {

            Dictinory dictinory = new Dictinory { Rus = "выходить", Arab = "خَرَجَ "};
            string json = JsonSerializer.Serialize<Dictinory>(dictinory);
            Console.WriteLine(json);

            Console.ReadLine();
        }
    }

Результат в консоли таков:

{"Arab":"\u062E\u064E\u0631\u064E\u062C\u064E ","Rus":"\u0432\u044B\u0445\u043E\u0434\u0438\u0442\u044C"}

Как решить данную проблему?


Ответы (1 шт):

Автор решения: aepot

Как сериализировать и десериализировать JSON в .NET

Dictinory dictinory = new Dictinory { Rus = "выходить", Arab = "خَرَجَ "};
Console.OutputEncoding = Encoding.UTF8;
JsonSerializerOptions options = new JsonSerializerOptions
{
    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
    WriteIndented = true
};
string json = JsonSerializer.Serialize<Dictinory>(dictinory, options);
Console.WriteLine(json);

Поставьте еще подходящий шрифт в консоли, например Currier New в настройках окна консоли.

Получится вывод:

{
  "Arab": "خَرَجَ ",
  "Rus": "выходить"
}

А если по делу, в вашем JSON нет проблемы, он просто представлен в виде Escapе-последовательностей символов юникода. Если вы передадите к примеру этот JSON на сервер, то он без проблем десереализаует это обратно. Ну или сами десереализуйте обратно, чтобы убедиться, что процесс обратимый.

→ Ссылка