在C#中将列表转换为json

时间:2018-08-15 06:42:35

标签: c# json linq

我使用此方法从列表生成JSON:

last code

但返回JSON时会出现以下错误:

  

期望对象或数组,而不是字符串
  多个JSON根元素

您在this链接中看到JSON文件,并在this网站中对其进行测试:

修改

我以此更改代码:

[HttpPost]
    [Route("api/Users/GetAllGoodInCat")]
    public object GetAllGoodInCat([FromBody]GoodsCatId goodsCatId)
    {
        try
        {
            if (goodsCatId.id != 0)
            {
                var getCat = (from a in db.goodsGroups
                                 where a.Id == goodsCatId.id
                                 select a).SingleOrDefault();

                if (getCat != null)
                {
                    var getAllfood = from a in db.goods
                        where a.groupId == goodsCatId.id
                        orderby a.Id
                        select a;

                    var resultList = new List<string>();

                    foreach (var good in getAllfood)
                    {
                        var obj = new SearchGoods()
                        {
                            good = new MyGoods
                            {
                                id = good.Id,
                                name = good.name,
                                price = good.price,
                                brand = new MyGoodsBrand
                                {
                                    id = getCat.Id,
                                    name = getCat.title,
                                    image = getCat.image
                                }
                            }
                        };

                        resultList.Add(new JavaScriptSerializer().Serialize(obj));
                    }

                    return resultList;
                }                   
            }

            return message.ProgramError();
        }
        catch (Exception)
        {
            return message.ProgramError();
        }
    }

    private class AllCat
    {
        public int id;
        public string name;
        public string image;
        public SubLevelOne subLevelOne;
    }
    private class SubLevelOne
    {
        public int id;
        public string name;
        public string image;
        public SubLevelTwo subLevelTwo;
    }
    private class SubLevelTwo
    {
        public int id;
        public string name;
        public string image;
    }

现在我的json就像这个链接:

[
   "{\"good\":{\"id\":1,\"name\":\"برنج دانه بلند محسن\",\"price\":20000,\"brand\":{\"id\":22,\"name\":\"برنج محسن\",\"image\":\"testmy.png\"}}}",
   "{\"good\":{\"id\":2,\"name\":\"برنج عطری\",\"price\":30000,\"brand\":{\"id\":22,\"name\":\"برنج محسن\",\"image\":\"testmy.png\"}}}",
   "{\"good\":{\"id\":3,\"name\":\"برنج سر سیاه\",\"price\":15000,\"brand\":{\"id\":22,\"name\":\"برنج محسن\",\"image\":\"testmy.png\"}}}"
]

但是我想要……this

(\)还有json文件吗?

3 个答案:

答案 0 :(得分:1)

我建议您使用Nuget软件包中提供的C#NewtonSoft Json软件包。

您可以这样做:

 var resultList = new List<SearchGoods>();

并且:

resultList.Add(obj);

最后只需返回:

return JsonConvert.SerializeObject(resultList);

它应该给您正确的结果。

答案 1 :(得分:0)

我认为您的方法类型应为JsonResult,

  public JsonResualt GetAllGoodInCat([FromBody]GoodsCatId goodsCatId){}

然后 在return方法中,您应该这样返回Json

return Json(model, JsonRequestBehavior.AllowGet);

答案 2 :(得分:-1)

您的json格式无效,这就是为什么您会收到所有这些错误的原因。您已将“”包围着json的每个对象和数组。只需删除它,您就可以使用了。

我已经清理了您的json:

public static class PredicateBuilder
{
    public static Expression<Func<T, bool>> MakePredicate<T>(this IEnumerable<T> source)
    {
        return null;
    }
         public static Expression<Func<T, bool>> True<T>() { return f => true; }
    public static Expression<Func<T, bool>> False<T>() { return f => false; }
    public static Expression<Func<T, bool>> True<T>(IQueryable<T> query) { return f => true; }
    public static Expression<Func<T, bool>> False<T>(IQueryable<T> query) { return f => false; }

希望这对您有帮助!