Json serialization: how to send c# data to javascript script. Error: Invalid character

Json serialization: how to send c# data to javascript script. Error: Invalid character

我正在尝试将数据从 Entity Framework 数据库发送到我网页上的 js 脚本。这是我的 MVC 控制器:

public ActionResult Index()
    {

        var wordsToShow = db.Words.Where(w => w.OwnerName == User.Identity.Name); // && DateTime.Compare(w.NextReview, DateTime.Now) <= 0

        ViewBag.wordsToShow = HttpUtility.HtmlDecode(new JavaScriptSerializer().Serialize(wordsToShow));

        var test = ViewBag.wordsToShow;


        return View();
    }

在 index.cshtml 中,我输入了以下代码:

<script>
    var wordsJson = "@ViewBag.wordsToShow.ToString()";
    var wordsAsObject = JSON.parse(wordsJson);
</script>

问题是,javascript 说:

Invalid character

在我将 json 解析为 javascript 对象的行中。原因是:json 字符串看起来不应该。这是网络浏览器中 "wordsJson" 变量的一部分:

我该怎么做才能让它发挥作用?

我总是创建 return JsonResult/string 的方法 喜欢:

 public string GetData()
        {
         //your logic here

            string json_sales = JsonConvert.SerializeObject(<<your data>>);
            return json_sales;     
        }

在 JavaScript 中,我只执行 AJAX 请求:

$.ajax({
        url: 'PUT_YOUR_URL_HERE_To_METHOD_GetData',
        dataType: "json",
        type: "GET",
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify({ Make: maka.value }),
        async: true, // Or false           
        cache: false,
        success: function (data) {
           //do something
            }

        },
        error: function (xhr) {
            alert('error');
        }
    })

你走得太迂回了。 JSON 被称为 "JavaScript Object Notation" 是有原因的。无需将其放入字符串中并重新解析。您可以只使用 JSON as JavaScript.

ASP.NET MVC 有一个帮助程序将值序列化为 JSON,因此您可以使用它并将其分配给 JavaScript:

中的变量
<script>
    var wordsAsObject = @Html.Raw(Json.Encode(ViewBag.wordsToShow));
</script>

这将消除在您的 Action 中进行 JSON 序列化的需要。

我怀疑您遇到此问题的原因是默认情况下,使用 @ 插入到视图中的值会自动进行 HTML 编码。您可以使用 Html.Raw() 来防止这种情况,正如我在上面所做的那样,但正如我所说,没有理由先将其放入字符串并进行解析。