Преобразование объекта 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)) );

решение OP сработало и для меня.

data = eval(JSON.parse(@Html.Raw(TheString)))