如何获得 JSON 响应而不是 XML?

Posted

技术标签:

【中文标题】如何获得 JSON 响应而不是 XML?【英文标题】:How can I get a JSON response instead of XML? 【发布时间】:2012-09-22 03:38:30 【问题描述】:

我只是新建一个 WebApi 项目并保留默认控制器:

public class ValuesController : ApiController
 
    // GET api/values/5
    public string Get(int id)
    
        return "value";
    

    //other services...

当我尝试请求它时,我无法获得有效的 JSON 结果。

没有特定的标题 => application/xml 结果 带有content-type 的标题分配给application/json => application/xml 结果 将accept 分配给application/json 的标头给了我正确的响应content-type,但JSON 格式错误:"value"

获取有效 JSON 结果的方法是什么?

【问题讨论】:

【参考方案1】:
没有特定的标头 => 应用程序/xml 结果 内容类型分配给 application/json 的标头 => application/xml 结果

您使用的是 MVC 4 RTM 吗?如果您使用的是 MVC 4 RTM,则默认格式应为 application/json...我无法重现您的场景。

接受分配给 application/json 的标头为我提供了正确的响应内容类型,但 JSON 格式错误:“值”。

"value" 实际上是字符串的有效 JSON 值。如果您正在寻找名称/值对的格式,这里有一个示例。假设我有一个名为“Person”的类...

public class Person

    public string FirstName  get; set; 
    public string LastName  get; set; 

...我有一个返回 person 对象的动作,

    public Person Get()
    
        return new Person()  Id = 1, FirstName = "John", LastName = "Doe" ;
    

然后对上述操作的调用将返回:

"Id":1,"FirstName":"John","LastName":"Doe"

希望这会有所帮助。

【讨论】:

是的,MVC4 RTM。我确认它适用于对象。我的问题是一个简单的字符串。我的 Json 解析器无法将“值”识别为有效的 json 字符串。【参考方案2】:

您必须使用JsonResult 作为您的返回类型:

public class ValuesController : ApiController
 
    // GET api/values/5
    public JsonResult Get(int id)
    
        object returnObject;

        // do here what you need to get the good object inside returnObject

        return this.Json(returnObject, JsonRequestBehavior.AllowGet);
    

    // other services...

【讨论】:

问题是字符串没有自动序列化。所以,你的解决方案很好。

以上是关于如何获得 JSON 响应而不是 XML?的主要内容,如果未能解决你的问题,请参考以下文章

RESTful 响应如何在 Yii2 中返回 JSON 而不是 XML?

RESTful 响应如何在 Yii2 中返回 JSON 而不是 XML?

ajax怎么获取json数据和xml数据

ajax怎么获取json数据和xml数据

如何在 yii 中以 json 格式(应用程序/json)获得响应?

NSwag Angular 5 如何获得 json 响应?