将 C# 对象转换为 JSON 或 Javascript 对象

本文关键字:对象 Javascript JSON 转换 | 更新日期: 2023-09-27 18:36:46

我是一名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# 中,所有对象都必须具有其成员名称。我能想到的只是字符串操作。有没有更好的方法?

将 C# 对象转换为 JSON 或 Javascript 对象

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

JSON.parse(@Html.Raw(TheString))

对于第二个错误,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);

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

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

另请查看 DataContractJsonSerializer Class

将对象序列化为 JavaScript 对象表示法 (JSON) 和 将 JSON 数据反序列化为对象。此类不能继承。

使用字符串将导致 Razor 保护您免受注射。如果您正在传递 json,则可能这不是问题。常见做法是使用 Html.Raw 帮助程序

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

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

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

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

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

您需要添加nuget package并在_ViewImports.cshtml中导入dll

@using Newtonsoft.Json;

希望它对某人有所帮助...