Сериализация для JavaScript Apex - PullRequest
       12

Сериализация для JavaScript Apex

0 голосов
/ 12 сентября 2018

Мне нужно сериализовать какой-нибудь простой объект из .NET в JavaScript ...

Но у меня есть некоторые проблемы с апексом ...

C # пример

var obj = new { id = 0, label = @"some ""important"" text" };
string json1 = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
string json2 = Newtonsoft.Json.JsonConvert.SerializeObject(obj,
                   new Newtonsoft.Json.JsonSerializerSettings() 
                   {
                       StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml 
                   });

Пример JavaScript

var resJson1= JSON.parse('{"id":0,"label":"some \"important\" text"}');
var resJson2= JSON.parse('{"id":0,"label":"some \u0022important\u0022 text"}');

Оба синтаксического анализа дают мне одну и ту же ошибку

VM517: 1 Uncaught SyntaxError: Неожиданный токен I в JSON в позиции 23 в JSON.parse ()

Где я не прав?

1 Ответ

0 голосов
/ 12 сентября 2018

Вы вставляете сгенерированную строку JSON в строковую константу JavaScript, не экранируя ее дальше.Попробуйте

console.log('{"id":0,"label":"some \"important\" text"}');

Вы увидите {"id":0,"label":"some "important" text"}, т. Е. "Важные" цитаты больше не экранируются обратными слешами.(И вы получите то же самое для вашего \u0022 примера.) Если вы хотите вставить обратную косую черту, вам придется снова их экранировать:

var resJson1= JSON.parse('{"id":0,"label":"some \\"important\\" text"}');

JSON, который вы создали с помощьюодиночная обратная косая черта была бы хороша, если бы она читалась из файла или URL, но не вставлялась в JavaScript как строковая константа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...