以不明确格式返回的 C# JSON 字符串



我记录的 Json 字符串有问题,因为它用双引号替换了"

控制器代码 :

var message = new SuccessMessagesVM()
        {
            Title = successMessageType == (int)EnumHelper.SuccessMessageTypes.Add ? "It's beautiful" : CustomModel.Resources.SuccessMessagesResources.EditFormSuccess,
            Message = successMessageType == (int)EnumHelper.SuccessMessageTypes.Add ? CustomModel.Resources.SuccessMessagesResources.AddFormSuccess : CustomModel.Resources.SuccessMessagesResources.EditFormSuccess,
            ColorCode = (int)EnumHelper.MessagesCodes.Success
        };
        var json = JsonConvert.SerializeObject(message);
        ViewBag.SuccessMessage = successMessageType == 0 ? null : json;

Javascript只是记录ViewBag.SuccessMessage如下:

console.log('@ViewBag.SuccessMessage');

并且对象显示为{"Message":"تم إضافة النموذج بنجاح","Title":"It's beautiful","ColorCode":3}将所有单引号替换为 ',将所有双引号替换为 "

我希望输出是{"Message":"تم إضافة النموذج بنجاح","Title":"It's beautiful","ColorCode":3}

这是因为您使用的是ViewBag变量。

为了使用ViewBag,你可以这样写:

首先,考虑到:

@{
        var jss = new System.Web.Script.Serialization.JavaScriptSerializer();
        var successMessageJson = jss.Serialize(ViewBag.SuccessMessage);
}

然后使用它:

<script>
    //use Json.parse to convert string to Json
    var successMessageInfo = JSON.parse('@Html.Raw(successMessageJson)');
</script>

有几个不同的问题和几种不同的方法,OP 没有给我们任何视图代码,所以这只是一些猜测。

我的感觉是,您应该只从您的方法返回SuccessMessagesVM,并在您的视图中单独访问属性(可能使用 @Html.DisplayFor 和 HTML)。这将确保从一开始就不会创建任何多余的引号,并让您完全控制值的显示方式。

您不应期望console.log(@ViewBag.Anything)正确显示。如果您需要将数据作为JavaScript对象,请不要将其粘贴在ViewBag中,因为它将呈现为HTML。

如果你

必须写入 JavaScript 对象,你可以,但它引出了一个问题,如果你想要的只是数据,为什么不使用 ajax 请求?

最新更新