将JSON从Controller反序列化为AJAX成功

时间:2014-08-05 14:19:51

标签: c# javascript ajax json httpwebrequest

我无法找到使用HttpWebRequest的正确格式,并将其响应返回到Javascript AJAX函数的可读JSON

如果我只返回text,它会在响应中添加转义斜杠。如果我反序列化text它然后添加所有缩进并使我的Javascript无法读取。 (我认为因为它没有传递实际对象)

试图将可读的json对象传递给我的ajax。

控制器

[HttpPost]
public ActionResult teamLookUp(string ID)
{
    HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("someurl.com/apis");
    myReq.ContentType = "application/json; charset=utf-8";
    var response = (HttpWebResponse)myReq.GetResponse();
    string text;

    using (var sr = new StreamReader(response.GetResponseStream()))
    {
        text = sr.ReadToEnd();
    }

    var json2 = JsonConvert.DeserializeObject(text);
    return Json(new { json = json2 });

    // return Json(new {json = text}); returns json with escaping \'s 
    //     i.e. "json":"{\"item":\"item2"}
    // return Json(new {json = json2}); returns empty json, 
    //     i.e. {"json":[[],[],[],[]]}
}

的Javascript

 $.ajax({
        url: "/Competitive/teamLookUp",
        type: "POST",
        data: "ID=" + ID,
        success: function (json) {
            alert(JSON.stringify(json));
            alert(json[ID].name());
        }, 
        error: function(error) {
        }
   });

需要帮助将json object返回到我的AJAX成功函数。

2 个答案:

答案 0 :(得分:0)

使用

dynamic json2=JsonConvert.DeserializeObject(text);

而不是

var json2 = JsonConvert.DeserializeObject(text);

希望有所帮助

答案 1 :(得分:0)

您尝试将响应反序列化为什么类型的对象?现在它只是进入一个字符串。可能想要创建一个对象来反序列化您正在调用的服务的响应。

这是一个返回我想出的字符串对象的工作示例

    public ActionResult ReturnJson()
    {
        var someText = "some random text";

        return Json(new {json = someText});
    }

的Javascript

<script>
    function testAjaxCall() {
        $.ajax({
           url: '@Url.Action("ReturnJson")',
           type: "POST",
           success: function (result) {
               alert(result);

               alert(result["json"]);
           },
           error: function (error) {}
        });

    }
</script>