C# JSON 字符串到 JavaScript 数组
C# JSON string to JavaScript array
我在 C# 中有以下 class:
public class Caption
{
public string line;
public string timestamp;
}
我创建了一些 Caption 对象并将它们添加到列表中:
List<Caption> CaptionList = new List<Caption>();
var obj = new Caption
{
line = "Some text"
timestamp = "00:10"
};
CaptionList.Add(obj);
然后我使用 Json.NET 将列表序列化为 Json,如下所示:
public string json = JsonConvert.SerializeObject(CaptionList);
现在我想将它用作 JavaScript 数组,所以我尝试了这个:
var arr = '<%=json%>';
我没有太多 JavaScript 知识,但现在 arr
似乎是一个字符串而不是数组,因为 json
实际上是一个 C# 字符串。我尝试使用 arr[i].line
等访问对象,但这不起作用。
如何使 json
成为 JavaScript 中的实际数组?
可以使用JSON.parse
方法将JSON字符串解析成数组:
var arr = JSON.parse('<%=json%>');
但是,由于 JSON 是 JavaScript 语法的子集,您实际上可以将 JSON 用作 JavaScript 数组文字:
var arr = <%=json%>;
拿来做演示
你的变量 arr
将被渲染成这样。这将是字符串。所以要将字符串转换为 JSON 对象,您需要解析该字符串。通过使用 JSON.parse(arr)
var arr = '[ { "line":"Some text", "timestamp":"00:10" }, { "line":"Some text", "timestamp":"00:10" } ]';
var JObject= JSON.parse(arr);
Now you can access JObject[0].line
这会给你
"Some text"
你可以看看Here at Mozilla
我们使用 MVC,在我们的视图(传递模型)中,每当我们想将模型转换为 javascript 对象时,我们使用简单的一行:
<script type="text/javascript">
$(document).ready(function () {
MyObject.Initialize(@Html.Raw(Json.Encode(Model)));
});
</script>
这一切的关键在于:
@Html.Raw(Json.Encode(Model))
"Model" 是 MVC 传递的,但你可以很容易地做这样的事情:(Razor 语法)
@{
List<Caption> CaptionList = new List<Caption>();
var obj = new Caption
{
line = "Some text"
timestamp = "00:10"
};
CaptionList.Add(obj);
}
然后...
<script type="text/javascript">
$(document).ready(function () {
MyObject.Initialize(@Html.Raw(Json.Encode(CaptionList)));
});
</script>
我还没有测试过,但它应该可以工作,或者它的一些变体,您可能需要将 "CaptionList" 作为 属性 放在某个父对象中,然后将其传递给 Json.Encode.
您也可以这样做:
<script type="text/javascript">
$(document).ready(function () {
var myArray = @Html.Raw(Json.Encode(CaptionList)));
});
</script>
请注意,jQuery 在这里不是必需的,它只是将其包装在 ready 函数中的一种方式。
我在 C# 中有以下 class:
public class Caption
{
public string line;
public string timestamp;
}
我创建了一些 Caption 对象并将它们添加到列表中:
List<Caption> CaptionList = new List<Caption>();
var obj = new Caption
{
line = "Some text"
timestamp = "00:10"
};
CaptionList.Add(obj);
然后我使用 Json.NET 将列表序列化为 Json,如下所示:
public string json = JsonConvert.SerializeObject(CaptionList);
现在我想将它用作 JavaScript 数组,所以我尝试了这个:
var arr = '<%=json%>';
我没有太多 JavaScript 知识,但现在 arr
似乎是一个字符串而不是数组,因为 json
实际上是一个 C# 字符串。我尝试使用 arr[i].line
等访问对象,但这不起作用。
如何使 json
成为 JavaScript 中的实际数组?
可以使用JSON.parse
方法将JSON字符串解析成数组:
var arr = JSON.parse('<%=json%>');
但是,由于 JSON 是 JavaScript 语法的子集,您实际上可以将 JSON 用作 JavaScript 数组文字:
var arr = <%=json%>;
拿来做演示
你的变量 arr
将被渲染成这样。这将是字符串。所以要将字符串转换为 JSON 对象,您需要解析该字符串。通过使用 JSON.parse(arr)
var arr = '[ { "line":"Some text", "timestamp":"00:10" }, { "line":"Some text", "timestamp":"00:10" } ]';
var JObject= JSON.parse(arr);
Now you can access JObject[0].line
这会给你
"Some text"
你可以看看Here at Mozilla
我们使用 MVC,在我们的视图(传递模型)中,每当我们想将模型转换为 javascript 对象时,我们使用简单的一行:
<script type="text/javascript">
$(document).ready(function () {
MyObject.Initialize(@Html.Raw(Json.Encode(Model)));
});
</script>
这一切的关键在于:
@Html.Raw(Json.Encode(Model))
"Model" 是 MVC 传递的,但你可以很容易地做这样的事情:(Razor 语法)
@{
List<Caption> CaptionList = new List<Caption>();
var obj = new Caption
{
line = "Some text"
timestamp = "00:10"
};
CaptionList.Add(obj);
}
然后...
<script type="text/javascript">
$(document).ready(function () {
MyObject.Initialize(@Html.Raw(Json.Encode(CaptionList)));
});
</script>
我还没有测试过,但它应该可以工作,或者它的一些变体,您可能需要将 "CaptionList" 作为 属性 放在某个父对象中,然后将其传递给 Json.Encode.
您也可以这样做:
<script type="text/javascript">
$(document).ready(function () {
var myArray = @Html.Raw(Json.Encode(CaptionList)));
});
</script>
请注意,jQuery 在这里不是必需的,它只是将其包装在 ready 函数中的一种方式。