从MVC控制器返回JSON字符串

4

我用以下代码向我的MVC控制器发送/接收对象:

$.ajax({
url: _createOrUpdateTimeRecord,
data: JSON.stringify(data),
type: "POST",
//dataType: "json",
contentType: "application/json; charset=utf-8",
beforeSend: function () {
    $("#loading-overlay").show();
},
success: function (data2) {
    try {   // tried to parse it manually to see if anything changes.
        data2 = JSON.parse(data2);
    }
    catch (err) {

    }
},
error: function (xhr, ajaxOptions, thrownError) {
    alert(thrownError + 'xhr error -- ' + xhr.status);
}

在我的mvc控制器上,我把JSON对象作为字符串处理,所以不需要.NET JavascriptSerializer和JsonResult。

我的JSON字符串看起来像:

data2 = "{title:'1111111',start:'2014-03-23T16:00:00.000',end:'2014-03-23T18:00:00.000',id:107,hdtid:1,color:'#c732bd',allDay:false,description:''}"

我总是收到以下错误信息:"无效字符"

我已经尝试返回字符串并在客户端手动解析JSON。因此,我使用了ContentResult作为返回类型,但没有成功。

    public class JsonStringResult : ContentResult
    {
        public JsonStringResult(string json)
        {
            Content = json;
            ContentType = "application/json";
        }
    }
这里有什么问题?JSON看起来很好... 祝好, Stefan
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
6

只需尝试一下 Json 控制器

  public JsonResult fnname()
    {
        string variablename = "{title:'1111111',start:'2014-03-23T16:00:00.000',end:'2014-03-23T18:00:00.000',id:107,hdtid:1,color:'#c732bd',allDay:false,description:''}";
        return Json(variablename , JsonRequestBehavior.AllowGet);
    }
JQuery JSON 传递
 $(document).ready(function() {
   $.post("/controllername/fnname", { }, function (result) {
      alert(result);
   }, "json");
 });

我猜这会导致这里描述的问题:https://dev59.com/m2kw5IYBdhLWcg3wmruH。然而,我尝试了那个答案中的另一种方式(反序列化和重新序列化),这对我有效... - stefan
抱歉,我不知道答案,但是什么是反序列化和重新序列化? - Dinesh
这是一个超级hack的情况。我有一个字符串并想返回JSON。因此,我使用JavaScriptSerializer.deserialize从我的字符串中获取对象,然后我可以创建一个JsonResult(它隐式地使用JavascriptSerializer)再次将我的对象序列化为JSON。我不知道为什么,但似乎JQuery可以读取这个,但我不明白为什么它不能读取我的JSON字符串... - stefan
那你为什么不这样做呢,只需使用(":")拆分字符串并将其制作成列表,然后通过jQuery我们可以将该列表附加为字符串。 - Dinesh

4

您的 data2 是 无效 的 JSON 字符串。应该是这样的:

data2 = "{\"title\":\"1111111\",\"start\":\"2014-03-23T16:00:00.000\",\"end\":\"2014-03-23T18:00:00.000\",\"id\":107,\"hdtid\":1,\"color\":\"#c732bd\",\"allDay\":false,\"description\":\"\"}"

在此处阅读JSON标准 http://json.org

JSON比普通JavaScript更严格,键必须用双引号括起来,字符串也必须用双引号括起来,单引号无效。

Douglas Crockford为了某种原因设计了JSON的严格格式。 http://www.yuiblog.com/blog/2009/08/11/video-crockford-json/

他的个人主页上还有许多有价值的链接。 http://javascript.crockford.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,