2012-10-01 82 views
1

我只是創建一個新的WebAPI項目,並保持默認控制器:如何獲得JSON響應而不是XML?

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結果
  • 頭與分配給application/jsonaccept給我一個正確的響應content-type但格式錯誤的JSON:"value"

獲得有效JSON結果的方式是什麼?

回答

1

你將不得不使用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... 
} 
+0

問題是一個字符串不會自動序列化。所以,你的解決方案很好。 – Spilarix

3
  • 沒有特定的頭=>應用程序/ XML結果
  • 頭與分配給應用程序內容類型/ JSON =>應用程序/ xml結果

您使用的是MVC 4 RTM嗎?如果您使用的是MVC 4 RTM,則默認格式應該是application/json ...我無法重新制作您的場景。

  • 頭接受並分配給應用程序/ JSON給我一個正確的響應內容類型,但一個畸形的JSON:「值」。

「value」實際上是字符串的有效JSON值。如果你正在尋找一個名稱/值對的格式,這裏是一個例子。說我有一個名爲「人」類...

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

...我有一個返回一個人對象的動作,

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

然後調用上述行動將返回這個:

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

希望這會有所幫助。

+0

是的,MVC4 RTM。我確認它適用於一個對象。我的問題是一個簡單的字符串。我的Json解析器不會將「value」識別爲有效的json字符串。 – Spilarix