Преобразование объекта C# в объект JSON или Javascript
Я разработчик C# и newbi в Javascript. У меня есть один объект C# и, наконец, в индексе.cshtml, я могу получить строку, преобразованную из объекта через вызов Json.Encode (obj)
строка:
[
{
"Name":"CASE_A",
"Values":[99.8,99.9,99.9,99.8,99.8,96.3,22.3]
},
{
"Name":"CASE_B",
"Values":[99.8,99.8,99.8,96.3,22.3]
},
]
однако, когда я звоню JSON.разбор (@TheString), я получил:
Uncaught SyntaxError: Unexpected token &
расположение этой ошибки показывает мне это:
data = JSON.parse([{"Name":"CASE_A","Values":[99.8,99.9,99.9,99.8 ....
как я могу решить эту проблему?
Спасибо за ответы! Но все же у меня есть ... ошибка:
Uncaught SyntaxError: Unexpected token o
для простого тестирования, я использовал этот:
@{
string tmp = "[{"Name":"CASE_A","Values":[99.8,99.9,98.6]},{"Name":"CASE_B","Values":[96.7,11.1]}]";
}
var data1 = JSON.parse(@Html.Raw(@tmp));
и источник показывает эту строку:
var data1 = JSON.parse([{"Name":"CASE_A","Values":[99.8,99.9,98.6]},{"Name":"CASE_B","Values":[96.7,11.1]}]);
Я не вижу здесь никакой "О".
кроме того, для создания объекта javascript Трэвис предложил удалить имя ключа перед сериализацией. Но в C# все объекты должны иметь свое имя. Все, о чем я могу думать, это манипуляции со струнами. Есть ли лучший способ сделать это?
5 ответов
Razor автоматически избегает HTML-объектов для вас в попытке быть полезным. Вы можете отключить это с помощью Html.Raw
:
JSON.parse(@Html.Raw(TheString))
вы можете попробовать это с помощью HtmlHelper.Сырой метод:-
data = JSON.parse(@Html.Raw(TheString));
также проверить Класс DataContractJsonSerializer
сериализует объекты в нотацию объектов JavaScript (JSON) и десериализует данные JSON в объекты. Этот класс не может быть унаследован.
для вашей второй ошибки, JSON.parse ожидает строку,но вы передаете массив. Ваш выводимый код js должен выглядеть так, чтобы работать:
var data1 = JSON.parse("[{\"Name\":\"CASE_A\",\"Values\":[99.8,99.9,98.6]},{\"Name\":\"CASE_B\",\"Values\":[96.7,11.1]}]");
Я также хочу отметить, что, поскольку вы вводите этот объект в свой код javascript на стороне сервера, нет необходимости вызывать JSON.разбирать вообще. Пока вы отправляете правильно отформатированный javascript клиенту, где он будет оценен и запущен, не имеет значения, как он создан на сервере. Попробовать это вместо этого:
var data1 = @Html.Raw(@tmp);
используя строку причинит бритву защитить вас от впрыски. Если вы проходите в json, скорее всего, это не проблема. Обычной практикой является использование Html.Raw
помощник
data = JSON.parse( @(Html.Raw(TheString)) );