通过MVC控制器和webmethod返回JSON

时间:2017-05-15 15:19:02

标签: asp.net asp.net-mvc webforms webmethod jsonresult

我正在尝试将带有许多代码隐藏webmethod函数的Web表单页面转换为带有控制器的MVC视图。

我得到的数据不同。他们已经正确格式化了JSON,但webmethod返回JSON,如下所示:

{"d":"{\"Success\":true,\"Data\":{\"QuoteId\":340439,\"LoginId\":40,

控制器返回:

"{\"QuoteId\":340444,\"LoginId\":40,

它没有将它包装在data.d中,因为它设置为在javascript中处理,并且没有SuccessData个对象。当我尝试像$.parseJSON(data)那样解析它(webmethod)时,它会在第1行消息中给出旧错误。

我敢肯定,如果我玩得足够的话,我可以让它与数据通过的方式一起工作,但我有很多页面,我需要在将来隐身,我只是想知道是否有是一种让控制器像webmethod那样对其进行格式化的简单方法。

我很确定我知道为什么数据的格式不同,但如果我能以同样的方式返回数据,它会让我的生活更轻松。我已经尝试返回一个JsonConvert.SerializeObject(obj),它只是一个字符串,而Return Json(obj),我猜测它只是一个字符串,但它们都返回相同的非数据。 d方式。

1 个答案:

答案 0 :(得分:0)

好的,所以我决定将数据包装在“d”中,这样​​我就可以在Ajax结果中有一个“data.d”。

但由于某些原因,当我通过以下方式发回数据时,日期格式不正确:

    GetObjectRequest getObjectRequest;
    getObjectRequest.SetBucket(bucket.c_str());
    getObjectRequest.SetKey(keyName.c_str());
    getObjectRequest.SetResponseStreamFactory([&destination](){
     return Aws::New<Aws::FStream>(
     "s3file", destination, std::ios_base::out); });

    // getObjectRequest.SetDataReceivedEventHandler() <--- How do I use this?

    GetObjectOutcome getObjectOutcome = SessionClient->GetObject(getObjectRequest);
    if(getObjectOutcome.IsSuccess())
    {
        std::cout << "<AWS DOWNLOAD> Get FW success!" << std::endl;
    }
    else
    {
        std::cout << "<AWS DOWNLOAD> Get FW failed: " << getObjectOutcome.GetError().GetMessage() << std::endl;
        exit(1);
    }
他们变得怪异。

基本上我要做的就是:

return Json(thewrappeddata);

好像我在这里两次“jsonifying”数据,一次使用public class JSONReturn { public object d; public static object Wrap(object data) { return new JSONReturn() { d = data }; } } var thedata = new TonsofData(); return Json( JSONReturn.Wrap( JsonConvert.SerializeObject(thedata, new JsonSerializerSettings { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore } ) ) ); ,一次使用JsonConvert.SerializeObject()(我认为序列化),但它似乎有效,现在我得到的是我需要和所有JS只是像以前一样工作。如果我遗漏Json()JsonConvert.SerializeObject()会错误地格式化日期,这会导致各种各样的失败。