首页 > 解决方案 > 如何按属性计算列表中的对象?

问题描述

我反序列化一个 JSON,如:files = JsonConvert.DeserializeObject<Files>(json);

我想计算natives-windowsartifact,所以我使用了 lamba,但我得到了 NullReferenceException。

files.libraries.GroupBy(x => new { x.downloads.artifact, x.downloads.classifiers.natives-windows }).Count();

有我的课:

public class Files
{
    public List<Library> libraries { get; set; }
}
public class Library
{
    public Downloads downloads { get; set; }
}
public class Downloads
{
    public Artifact artifact { get; set; }
    public Classifiers classifiers { get; set; }
}

public class Artifact{...}

public class Classifiers
{
    public NativesWindows natives-windows { get; set; }
    ...
}
public class NativesWindows{...}

标签: c#jsonlinqcountdeserialization

解决方案


我相信您的 json 数据和您的类之间存在不匹配,因此返回的对象具有空值。

另外我相信您的 LINQ 查询也有问题。

以这种方式尝试。您需要在分组后选择

files.libraries.GroupBy(x => new { x.downloads.artifact, 
     x.downloads?.classifiers?.natives-windows ?? "default value for nulls" })
     .Select(x => new { 
          Artifact = x.Key.artifact,
          NativesWindows = x.Key.natives-windows,
          Count = x.Count()
     });

请记住,修复 LINQ 查询不会解决您的 NullReferenceException


推荐阅读