9

我是 C# 开发人员和 Javascript 的新手。我有一个 C# 对象,最后,在 index.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.parse(@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]}]);

我在这里看不到任何“o”。


此外,为了制作 javascript 对象,Travis 建议在序列化之前删除键名。但在 C# 中,所有对象都必须有其成员名称。我能想到的只是字符串操作。有没有更好的方法呢?

4

6 回答 6

21

Razor 会自动为您转义 HTML 实体以提供帮助。您可以使用以下命令禁用此功能Html.Raw

JSON.parse(@Html.Raw(TheString))
于 2013-10-23T15:52:37.103 回答
6

对于您的第二个错误, 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.parse。只要您将格式正确的 javascript 发送到将对其进行评估和运行的客户端,那么它在服务器上的创建方式就无关紧要了。试试这个:

var data1 = @Html.Raw(@tmp);
于 2013-10-24T00:21:31.683 回答
3

您可以使用HtmlHelper.Raw 方法尝试此操作:-

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

另请查看DataContractJsonSerializer 类

将对象序列化为 JavaScript 对象表示法 (JSON) 并将 JSON 数据反序列化为对象。这个类不能被继承。

于 2013-10-23T15:53:27.557 回答
1

使用字符串将导致 Razor 保护您免受注射。如果您传入 json,那么这不是问题。常见的做法是使用Html.Raw助手

data = JSON.parse( @(Html.Raw(TheString)) );
于 2013-10-23T15:51:40.647 回答
0

OP 的解决方案也对我有用。

data = eval(JSON.parse(@Html.Raw(TheString)))
于 2014-10-09T17:59:08.350 回答
0

如果你有一个 C#Object并且想在 JavaScript 中按原样使用它,你可以这样做:

var jsObject = @Html.Raw(JsonConvert.SerializeObject(TheString));

您需要添加nuget package并导入dllin _ViewImports.cshtml

@using Newtonsoft.Json;

希望它可以帮助某人...

于 2019-08-02T17:54:55.820 回答