2014-03-06 24 views
0

我有以下操作方法:不能轉換目錄到JSON

public class MyDeviceController : ApiController 
{ 
    // GET api/<controller> 
    public JsonResult Get() 
    { 
     int userId = -1; 
     List<String> myDevices1 = new List<String>(); 
     myDevices1.Add("1"); 
     >> return Json(myDevices1); << Error here   
    } 
} 

返回的紅色下劃線,出現以下錯誤:

cannot implicitly convert type (JsonResult to List<string>) 

我使用Asp.net的Web API。我認爲它的使用System.web.http和System.mvc.http ^ h

+1

在你的代碼中似乎沒有錯。你如何訪問這個動作方法?直接通過http請求或在另一個動作內? –

+0

你可以粘貼代碼,你得到這個具體的錯誤 –

+0

請參閱編輯 – Zapnologica

回答

-1

之間越來越困惑,您使用的Web API: 您可以留下您的代碼是這樣的:

public class MyDeviceController : ApiController 
{ 
    // GET api/<controller> 
    public List<string> Get() 
    { 
     int userId = -1; 
     List<String> myDevices1 = new List<String>(); 
     myDevices1.Add("1"); 
     return myDevices;   
    } 
} 

默認它會返回XML,但 加入這一行的代碼WebApiConfig.cs,將默認返回JSON:

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml"); 
     config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); 

查看更多有關Web API media Formatters

還有做事情的另一種方式(不是最好的方法):

using Newtonsoft.Json; 
    public HttpResponseMessage get(){ 
      List<String> myDevices1 = new List<String>(); 
      myDevices1.Add("1"); 
      JsonConvert.SerializeObject(myDevices1); 

      return Request.CreateResponse(HttpStatusCode.OK, myDevices1);; 
    } 
+0

使用返回類型的JsonResult是一個標準的方法。返回字符串而不是json,您將不得不手動查看內容類型和反序列化。 –

+0

順便說一句:你序列化,然後扔掉結果。 –

+0

我看到....以及好的事情是,web API可以返回json默認 – DmitryK

5

你的系統是混亂

System.Web.Mvc.JsonResult之間
System.Web.Http.Results.JsonResult<List<string>> 

嘗試specifiyng全稱是System.Web.Http.Results.JsonResult>

public System.Web.Http.Results.JsonResult<List<string>> Get() 
{ 
    int userId = -1; 
    List<String> myDevices1 = new List<String>(); 
    myDevices1.Add("1"); 
    return Json(myDevices1); 
} 

另一個和優選的方法將是

public HttpResponseMessage Get() 
{ 
    int userId = -1; 
    List<String> myDevices1 = new List<String>(); 
    myDevices1.Add("1"); 
    return Request.CreateResponse(myDevices1); 
} 
在後者TEH asp.net網頁API將通過被I在 Accepts報頭中指定並且將發送XML或JSON適當

客戶端所接受的格式之間自動協商

+0

在你的第二種方法它會返回XML,而不是json ... – DmitryK

+1

看到什麼是返回後,它取決於接受頭在客戶請求 –

+0

確切地說,你可以默認設置你的api返回json,看到我上面的答案 – DmitryK

0

我定義的類中的web api項目城市 JsonResult列表轉換並返回。

 public class City 
    { 
     public int Id { get; set; } 
     public string CityName{ get; set; } 
    } 


    static List<City> _City = InitCitys(); 

    private static List<City> Citys() 
    { 
     var returnList = new List<City>(); 
     returnList.Add(new City{ Id = 0, CityName= "Sinop" }); 
     returnList.Add(new City{ Id = 1, CityName= "Ayancık" }); 
     returnList.Add(new City{ Id = 2, CityName= "İstanbul" }); 
     return returnList; 
    } 

    // GET api/values 

    public JsonResult<City> Get(int Id) 
    { 
     var cityJsonResult = _City.Where(x => x.Id == Id).SingleOrDefault(); 

     return Json(cityJsonResult); 
    }