JsonResult没有返回(有效)json - 序列化出错?

时间:2013-01-09 21:49:32

标签: jquery asp.net-mvc json json.net

我尝试在ASP.NET MVC 4中对服务器端方法进行简单调用。我通过对方法进行jQuery调用来实现此目的。调用该方法并且属性正确,但此方法的响应不正确。我尝试使用JSON.NET序列化.NET对象。

我可以看到我得到以下响应(使用FireBug):

"{\"VisitorId\":\"11a0606b-5336-4fa7-b50f-3edf97d8301b\",\"PhoneToTransfer\":\"61793650\",\"PhoneToNotify\":\"\",\"EmailToNotify\":\"mcoroklo@gmail.com\",\"EmailToTransfer\":\"\",\"OrderState\":\"PaymentPending\",\"DestinationAddress\":\"1Ccypfi3rnXosUgY6p1sQVXFyddFvwLFEJ\",\"TransactionHash\":\"\",\"Value\":12.0,\"Confirmations\":-1,\"TransactionDate\":\"2013-01-09T22:36:33.7991116+01:00\"}"

这不会解析为正确的JSON,我不知道为什么。另外,Firebug中的“JSON”选项卡说“没有为此对象显示的属性”。

我非常确定我的内容类型和数据类型在通话中是正确的。

这是我制作JSON的代码 - 使用JSON.NET库:

[HttpPost]
public JsonResult StartPurchase(string phoneReceiver, string emailNotify, string value)
{
    if (ModelState.IsValid)
    {
        BlockchainPayments block = new BlockchainPayments();
        var address = block.GetAddress(BtcContext.PurchaseSession);

        decimal val = 0;
        decimal.TryParse(value, out val);

        var ps = new PurchaseService();
        var purchase = ps.StartPurchase(BtcContext.PurchaseSession, phoneReceiver, emailNotify, address.destination, val);
        return Json(JsonConvert.SerializeObject(purchase));
    }
    return Json("Error");
}

这是jQuery调用:

$.ajax({
    type: "POST",
    url: url,
    data: dataToSend,
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function (data) {
        alert('Awesome destination succes');
    },
    error: function (date) {
        alert('An occurred while purchasing. Please try again later');
    }
});

知道它为什么没有返回有效的JSON?关于如何解决它的任何想法?

2 个答案:

答案 0 :(得分:3)

看起来你是对它进行双重编码,只需使用一种转换方法,例如: return Json(purchase);

答案 1 :(得分:2)

return Json已经序列化了我认为的对象。看起来你正在进行双重序列化。