Jsonresult /请求以XML格式返回json

时间:2012-04-02 10:28:19

标签: xml asp.net-mvc json asp.net-mvc-4 asp.net-web-api

我有一个请求外部Web服务并在此处返回json的方法:

    public string GetJsonRequest(string url)
    {
        string response = string.Empty;
        var request = System.Net.WebRequest.Create(url) as HttpWebRequest;
        if (request != null)
        {
            request.Method = WebRequestMethods.Http.Get;
            request.Timeout = 20000;
            request.ContentType = "application/json";


            var httpresponse = (HttpWebResponse)request.GetResponse();

            using (var streamreader = new StreamReader(httpresponse.GetResponseStream()))
                   response = streamreader.ReadToEnd();

            if (httpresponse != null) httpresponse.Close();
        }
        return response;
    }

这是一个返回结果的方法:

    public JsonResult Makes()       
    {
        CarRepository rep = new CarRepository();
        return new JsonResult()
        {
            Data = rep.GetMakes(),
            ContentType = "application/json"
        };
    }

    public string Makes()       
    {
        CarRepository rep = new CarRepository();
        return rep.GetMakes();
    }

这将返回正确的json,但它包含在XML

<JsonResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <ContentType>application/json</ContentType>
   <Data xsi:type="xsd:string">
       The JSON data.......
   </Data>
  <JsonRequestBehavior>AllowGet</JsonRequestBehavior>
  <MaxJsonLength xsi:nil="true"/>
  <RecursionLimit xsi:nil="true"/>
</JsonResult>

我已经在fiddler中检查过请求,而Accept头只有xml值。如何才能打印出json?我正在使用ASP.NET Web API。我可以在应用程序启动时删除XML mediatypeformatter,但我可能需要稍后使用它,所以我不认为这是可行的方法。

提前致谢

2 个答案:

答案 0 :(得分:2)

你不应该从ApiController动作返回JsonResult。 ApiController动作应该返回对象(或集合),并且MediaTypeFormatters正在处理将它们序列化为JSON,XML或其他任何东西(基于所请求的内容类型)。请看一下这个基本的tutorial

<强>更新

要确保客户端请求JSON(而不是XML),Web API将尝试使用正确的MediaTypeFormatter将其添加到您的客户端:

request.Accept = "application/json";

答案 1 :(得分:0)

而不是在WebMethod中使用字符串返回字符串:

JavaScriptSerializer js = new JavaScriptSerializer();
Context.Response.Write(js.Serialize(YOUR_STRING_TO_OUTPUT));