无法将列表转换为Json

时间:2014-03-06 09:42:15

标签: c# asp.net-mvc json asp.net-web-api

我有以下行动方法:

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之间感到困惑 ħ

3 个答案:

答案 0 :(得分:5)

你的系统混淆了

System.Web.Http.Results.JsonResult<List<string>>

System.Web.Mvc.JsonResult

尝试指定全名,即System.Web.Http.Results.JsonResult&gt;

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);   
}

在后者中,asp.net web api将自动在客户端接受的格式之间进行协商,该格式在Accepts标头中指定并适当地发送XML或JSON

答案 1 :(得分: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);
    }

答案 2 :(得分:-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);;
    }