将模型数据解析为JSON对象

耶普·克里斯滕森(Jeppe Christensen)

我需要将模型对象列表转换为JSON列表。

<a data-model="@Model.Schools"></a>");

当按下上述按钮时,学校列表将解析为一个jQuery事件处理程序(我在这里遗漏了一些代码)

在这里,我自然希望将学校列表读为json列表。

var items = JSON.stringify(button.data('model'))
var items2 = JSON.parse('"' + button.data('model') + '"')

我尝试了上面的方法,但是没有运气,它仍然因为尝试转换System.Collections.Generic.List`1而大吼大叫。

我也尝试在按钮上将对象序列化为JSON,即,@HTML.raw(Json.Serialize(Model.Schools)但这只是在jQuery中给了我一个空对象...

因此,如何在jQuery中将Model对象转换为json对象?

如果我正确地收到了您的问题说明,看来您已经很多了。

您需要将列表序列化为Razor属性(不要使用@Html.Rawhelper,因为它不会转义您的字符串并弄乱您的页面):

完整的.net框架

<a id="btnModel" data-model="@Json.Encode(Model.Schools)" onclick="process()">TEST</a>
<!-- assuming you have Newtonsoft.Json package installed, the following line should also work-->
<a id="btnModel" data-model="@Newtonsoft.Json.JsonConvert.SerializeObject(Model.Schools)" onclick="process()">TEST</a>

然后在您的Javascript中:

function process() {
    var m = $('#btnModel').data('model');               
    alert(JSON.stringify(m));
}

查看这个dotnet提琴作为工作示例

.net核心3

显然,内置的serilizer会以某种方式乱码格式,因此需要正确的html编码。不幸的是,这意味着您必须使用Javascript对其进行解码。避免这种麻烦的一种方法是将json字符串输出到javasctipt块中(请参见第二个示例)

<a id="btnModel" data-model="@Html.Encode(Json.Serialize(Model.Schools))" onclick="process()">Method 1 - Lotsa pain</a>
<a id="btnModel1" onclick="process1()">Method 2 - Less back and forth</a>
function decodeHtml(html) {
    var txt = document.createElement("textarea");
    txt.innerHTML = html;
    return txt.value;
}
function process() {
    var a = $('#btnModel').data('model');
    a = JSON.parse(decodeHtml(a));
    alert(JSON.stringify(a));
}
function process1() {
    var a = @Json.Serialize(Model.Schools);
    alert(JSON.stringify(a));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章