【问题标题】:How can i get a single response using linq如何使用 linq 获得单个响应
【发布时间】:2020-03-18 01:18:44
【问题描述】:

我有以下 API 代码来获得单个结果响应,但我收到错误 json.net 抱怨 当我删除此行var Product = prdList .FirstOrDefault(a => a.ID == productID);return Json(prdList); 时,它工作正常,但返回表中的每一行。我怎样才能得到一条记录?

这里是代码

[HttpGet("{productID}")]
        public async Task<IActionResult> Getproduct(int productID)
        {
            var prdList = (await rpsService.Getrps(productID)).ToList();
            var Product = prdList .FirstOrDefault(a => a.ID == productID);
            return Json(Product);

        }

这是我得到的错误,我检索了正确的信息,但是当我加载页面时出现错误

JsonSerializationException: 无法反序列化当前 JSON 对象 (例如 {"name":"value"}) 转换为类型 'System.Collections.Generic.IList`1 项目名称”,因为该类型需要 JSON 数组(例如 [1,2,3]) 正确反序列化。要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其 是一个普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是 可以反序列化的集合类型(如数组或列表) 来自 JSON 对象。 JsonObjectAttribute 也可以添加到类型中 强制它从 JSON 对象反序列化。路径“productID”,行 1,位置 13。

我试过这个工作正常,但显示所有行

     [HttpGet("{productID}")]
        public async Task<IActionResult> GetProduct(int productID)
        {
            var prdList = (await rpsService.Getrps(productID)).ToList();
           return Json(prdList );

        }

【问题讨论】:

  • “归还一切”是什么意思?它是产品列表还是相关表格的任何其他记录?
  • @RangaDewasinghe 我的意思是表格中的每一行
  • 'Deserialize' 暗示问题出在您的代码中调用此 API,该代码在哪里?如果它需要一个数组,您的意思是返回Where(a =&gt; a.ID == productID) 而不是FirstOrDefault(a =&gt; a.ID == productID)
  • @lan Mercer 我想要的,谢谢。

标签: json asp.net-mvc linq asp.net-core dependency-injection


【解决方案1】:

您可以在获取列表时直接应用条件,如下所述。

 var prdList = (await rpsService.Getrps(productID)).ToList().FirstOrDefault();

【讨论】:

  • FirstOrDefault 创建问题,在获取列表时直接应用有什么好处?
  • 正如我所见,您已经在 Getrps 中将 productid 作为参数传递来过滤数据,以便您的。此外,如果 FirstOrDefault() 造成问题,那么您能否检查 Getups() 的返回类型是什么。它是返回一个列表/可枚举还是单个对象?
  • 如果返回单个对象,则无需应用 FirstOrDefault()。可以分享一下吗
【解决方案2】:

试试这个

  var Product = prdList.Where(a => a.ID == productID).FirstOrDefault();

var prdList = (await rpsService.Getrps(productID)).ToList().FirstOrDefault();
           return Json(prdList);

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 2014-08-13
    • 2018-03-17
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    相关资源
    最近更新 更多