【问题标题】:How to return data in object format for web api?如何为 Web api 返回对象格式的数据?
【发布时间】:2015-05-27 06:47:06
【问题描述】:

我必须以 json 格式返回数据,但它说不能将类型字符串隐式转换为 system.collection.generic.list(object)。

 [HttpGet]
    public List<object> GetAllCompanies2()
    {
        List<object> myCo = DefCompany.AllDefCompany2;
         // return myCo----------> works

        string json = JsonConvert.SerializeObject(myCo);
        return  json; ------- > not works conversion error & i need this
    }

我尝试了 tostring() 和许多其他方法,但没有任何效果。如何将字符串转换为对象?
这是我的功能代码 AllDefCompany2

   public static List<object> AllDefCompany2
    {
        get
        {
            using (var db = new RPDBEntities())
            {

                return db.DefCompanies.Select(b => new 
                {
                    Id = b.Id,

                    CurrentCurrencyCode = b.CurrentCurrencyCode,
                    ShortName = b.ShortName,
                    FullName = b.FullName,
                    ContactPerson = b.ContactPerson,
                    Address1 = b.Address1,
                    CompanyCity = b.CompanyCity,
                    CompanyState = b.CompanyState,
                    CompanyCountry = b.CompanyCountry,
                    ZipPostCode = b.ZipPostCode,
                    TelArea = b.TelArea

                }).ToList<object>();


            }

        }

    }

【问题讨论】:

  • JsonConvert.SerializeObject(myCo) 不会以json 格式返回数据,而是以string 的形式返回,以便稍后解析

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


【解决方案1】:

这段代码帮助我解决了 api 和 kendo 问题

[HttpGet]
public List<object> GetAllCompanies2()
{
    List<object> myCo = DefCompany.AllDefCompany2;         

    object json = JsonConvert.SerializeObject(myCo);
    return  json;
}

【讨论】:

    【解决方案2】:

    这里是配置设置

     using System.Data.Entity;
    
      namespace RpManticSolAPI
      {
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
            GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);          
        }
    }
     }
    

    【讨论】:

      【解决方案3】:
      return JsonConvert.SerializeObject(myCo);
      

      【讨论】:

      • 只有代码是不够的,在这里解释一下你在做什么
      • 假设 myCo 返回的对象是 List。该错误是因为您正在返回一个 STRING 变量。 (return json) 而该方法期望返回类型为List&lt;object&gt;
      • JsonConvert.SerializeObject(myCo)的返回值仍然是string,不先存入变量也无所谓
      • 我必须调用 api 并填充网格,网格已成功填充,但 api 在测试期间显示:“ObjectContent`1”类型无法序列化内容类型“application/xml;”的响应正文; charset=utf-8'.
      【解决方案4】:

      您可以将string 转换为object,但您在显示的代码中尝试将其转换为List&lt;object&gt;。您可以尝试在 json 变量上调用 AsEnumerableToList

      但是如果你想做的是返回一个字符串,为什么不改变方法的返回类型呢?

      【讨论】:

        【解决方案5】:
        [HttpGet]
        public string GetAllCompanies2()
        {
            List<object> myCo = DefCompany.AllDefCompany2;
             // return myCo----------> works
        
            string json = JsonConvert.SerializeObject(myCo);
            return  json; ------- > not works conversion error & i need this
        }
        

        试试这个。需要根据返回对象列表还是字符串(在本例中为 json)来更改函数返回类型

        【讨论】:

        • 我必须填充剑道网格,即使这样我的剑道网格不会填充
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        相关资源
        最近更新 更多