У меня есть данные 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 = "";
}
Почему Ž превращается в }\u0001? Что это за странная схема кодирования?





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