Как сериализовать специальные символы с помощью JsonSerializing

У меня есть данные json с сербскими символами! Когда я хочу получить эти данные, мне нужен JsonSeriaize и преобразование данных, например, Željko Cvijetić в }\u0001eljko Cvijeti\u0007\u0001.

Есть идеи решить эту проблему?

Вот пример результата Json

"SMSFlowMessages": [
{
  "Display": "Example",
  "MessageId": 104,
  "MessageText": "Dear }\u0001eljko Cvijeti\u0007\u0001, the 22-05-2018 it will be your Birthday!!\nIn this special day you will have double points on all products!\n\nExample Team"
},
{
  "Display": "Example",
  "MessageId": 105,
  "MessageText": "Dear test test, the 22-05-2035 it will be your Birthday!!\nIn this special day you will have double points on all products!\n\nExample Team"
},

Вот мой код C#

  JsonSerializerSettings settings = new JsonSerializerSettings() { Culture = new CultureInfo("sr-Latn-CS") };
    json = JsonConvert.SerializeObject(root, settings);

     root.SMSFlowMessages.Clear();
     root.ViberFlowMessages.Clear();

      try
      {

      log.append("SMS SEND>>START:" + Environment.NewLine + json + Environment.NewLine + ">>END", logdir);

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(apiurl);
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
        var getresult = client.PostAsync(apiurl, stringContent).Result;
        string resultContent = getresult.Content.ReadAsStringAsync().Result;
        log.append("SMS RECV<<START:" + Environment.NewLine + resultContent + Environment.NewLine + "<<END", logdir);

         smsflag = "";
         json = "";

         }

Вам необходимо преобразовать текст перед его использованием в формате JSON. Взгляните на это: stackoverflow.com/questions/1615559/…

Konamiman 18.05.2018 12:46

Почему Ž превращается в }\u0001? Что это за странная схема кодирования?

gnud 18.05.2018 12:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
2
8 014
2

Ответы 2

JSON поддерживает Unicode, а JSON обычно кодируется как UTF-8 при использовании в HTTP API. Однако, если вам нужно экранировать символы, отличные от ASCII, при сериализации в JSON, вы можете указать это с помощью свойства JsonSerializerSettings.StringEscapeHandling:

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

Это приводит к этому JSON:

"\u017deljko Cvijeti\u0107"

Это не то же самое, что вы показываете в своем вопросе, но, честно говоря, я понятия не имею, как Ž отображается на "}\u0001". См. Управляющие последовательности Unicode, чтобы узнать, как экранировать символ в строковом литерале JavaScript.

Хотя эта ветка к настоящему времени довольно старая, я постараюсь помочь некоторым людям, которые наткнулись на эту ветку после меня. Я действительно не понимаю основную проблему или намерение этой темы, но я думаю, что саулясар неправильно сформулировал свой вопрос. Я интерпретирую его вопрос так: как я могу сериализовать мою строку «Željko Cvijetić» в JSON без преобразования символов во что-то вроде «} \ u0001».

Ответ на это довольно прост:

var output = JsonSerializer.Serialize("Željko Cvijetić", new JsonSerializerOptions
                {
                    WriteIndented = true,
                    Encoder = JavaScriptEncoder.Default
                });

-> output: "\"\\u017Deljko Cvijeti\\u0107\""

преобразует строку в JSON, но преобразует специальные символы, а

var output = JsonSerializer.Serialize("Željko Cvijetić", new JsonSerializerOptions
                {
                    WriteIndented = true,
                    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
                });

-> output: "\"Željko Cvijetić\""

решает проблему с помощью кодировщика UnsafeRelaxedJsonEscaping.

Другие вопросы по теме