Как посчитать объекты в списке по свойствам? - PullRequest
0 голосов
/ 12 января 2019

Я десериализовал JSON как: files = JsonConvert.DeserializeObject<Files>(json);

Я хотел бы сосчитать native-windows и артефакт , поэтому я использовал 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{...}

1 Ответ

0 голосов
/ 12 января 2019

Я полагаю, что есть несоответствие между вашими данными 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

...