【问题标题】:How can I get a JSON response instead of XML?如何获得 JSON 响应而不是 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 结果的方法是什么?

【问题讨论】:

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


    【解决方案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...
    }
    

    【讨论】:

    • 问题是字符串没有自动序列化。所以,你的解决方案很好。
    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 2015-08-01
    相关资源
    最近更新 更多