Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsonresult/返回XML包装的json的请求_Xml_Asp.net Mvc_Json_Asp.net Mvc 4_Asp.net Web Api - Fatal编程技术网

Jsonresult/返回XML包装的json的请求

Jsonresult/返回XML包装的json的请求,xml,asp.net-mvc,json,asp.net-mvc-4,asp.net-web-api,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) { reque

我有一个方法,在这里请求外部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"
        };
    }

这将返回正确的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>

应用程序/json
JSON数据。。。。。。。
AllowGet
我已经在fiddler中检查了请求,并且Accept头中只有xml值。我怎样才能让它打印出json?我正在使用ASP.NET Web API。我可以在应用程序启动时删除XML mediatypeformatter,但以后可能需要使用它,所以我认为这不是解决问题的方法


提前感谢

您不应该从ApiController操作返回JsonResult。ApiController操作应返回对象(或集合),MediaTypeFormatters负责将其序列化为JSON、XML或任何其他格式(基于请求的内容类型)。请看一下这个基本的

更新

要确保客户端正在请求JSON(而不是XML),并且Web API将尝试使用适当的MediaTypeFormatter,请将以下内容添加到客户端:

request.Accept = "application/json";

不要在WebMethod中返回字符串,请使用:

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

好的,我已经将其更改为返回一个字符串,但它仍然是一样的。Json封装在XML中。您是说rep.GetMakes()返回一个字符串吗?请检查我对您的客户端请求的更新。是的,rep.getmakes()返回一个字符串。我不认为我可以返回一个对象,因为数据会根据我从哪里获取而发生很大变化。是的,这是正确的,我只是一个傻瓜,从浏览器加载它,当我在fiddler中手工创建请求时,浏览器默认为application/xml。第二个问题是JSON字符串引号被转义了?非常感谢你的帮助far@tpeczek我也有类似的问题。。你能检查一下并给我一个解决方案吗
JavaScriptSerializer js = new JavaScriptSerializer();
Context.Response.Write(js.Serialize(YOUR_STRING_TO_OUTPUT));