Как использовать многоуровневый JSON в отчете

29.06.2019

Несмотря на то, что FastReport.Net предоставляет нам плагин дизайнера отчетов для использования в качестве источника данных файла JSON, все же не всегда он подходит. Этот плагин хорошо работает с одноуровневыми данными, представляющими отдельную таблицу. В случаях же, когда данные имеют множество уровней вложенности, придется прибегнуть к другому решению.

 Например, использование библиотеки Newtonsoft.Json - с ее помощью можно получить данные из JSON, сформировать из них список зарегистрировать его в отчёте из кода.

 Давайте рассмотрим все на примере. Создадим приложение WinForms. С помощью NuGet менеджера устанавливаем пакет Newtonsoft.Json. В Reference добавляем ссылку на библиотеку FastReport.dll.

Допустим у нас есть данные о продажах менеджеров в магазинах. Все эти данные в одном файле, но по сути это три разные сущности: магазин, менеджер и продажа. Вот таким будет наш json файл для этого примера:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
{
 "Shops": [{
 "Name": "First shop",
 "Managers": [{
 "Name": "John",
 "Phone": "45443446343",
 "Sales": [{
 "GoodId": "1",
 "Amount": "3"
 },
 {
 "GoodId": "2",
 "Amount": "5"
 },
 {
 "GoodId": "3",
 "Amount": "2"
 }
 ]
 },
 {
 "Name": "Boris",
 "Phone": "8787964387",
 "Sales": [{
 "GoodId": "15",
 "Amount": "8"
 },
 {
 "GoodId": "12",
 "Amount": "2"
 },
 {
 "GoodId": "13",
 "Amount": "2"
 }
 ]
 }
 ]
 },
 {
 "Name": "Second shop",
 "Managers": [{
 "Name": "Julia",
 "Phone": "5555555555",
 "Sales": [{
 "GoodId": "1",
 "Amount": "30"
 }]
 },
 {
 "Name": "Helen",
 "Phone": "8787964387",
 "Sales": [{
 "GoodId": "2",
 "Amount": "8"
 },
 {
 "GoodId": "3",
 "Amount": "26"
 },
 {
 "GoodId": "1",
 "Amount": "2"
 }
 ]
 }
 ]
 }
 ]
}

Чтобы десериализовать эти данные, нам потребуются объекты, со свойствами, соответствующими полям в JSON.

Да, если JSON документ имеет действительно глубокую вложенность, создание классов может быть весьма утомительно . Поэтому существует прекрасный веб сервис http://json2csharp.com/. Вы просто помещаете в поле ввода свой валидный json, нажимаете кнопку Generate, и получаете готовые классы C#. Для нашего json документа будет сгенерирован следующий набор классов:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Sale
 {
 public string GoodId { get; set; }
 public string Amount { get; set; }
 }
 
 public class Manager
 {
 public string Name { get; set; }
 public string Phone { get; set; }
 public List<Sale> Sales { get; set; }
 }
 
 public class Shop
 {
 public string Name { get; set; }
 public List<Manager> Managers { get; set; }
 }
 
 public class RootObject
 {
 public List<Shop> Shops { get; set; }
 }

Давайте создадим для них отдельный файл Sales.cs.

Добавим на форму кнопку. Для события нажатия на нее создадим обработчик:

1
2
3
4
5
6
7
private void RunBtn_Click(object sender, EventArgs e)
 {
 var json = JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(@"Sales.json"));
 Report report = new Report();
 report.RegisterData(json.Shops,"Shops");
 report.Design(); 
 }

Как видите, здесь мы используем библиотеку Newtonsoft.json для десериализации json в объект RootObject, который имеет свойство Shops, представляющее собой список магазинов. Регистрируем этот список в отчете, как источник данных.  И вызываем дизайнер отчетов. Запустим наше приложение с единственной кнопкой и нажмем ее. Появится дизайнер отчетов с пустым отчетом. Выберем источник данных отчета:

 

На основе этих данных создадим шаблон отчета:

Как видите, бэнд Данные имеет дочерний, а тот в свою очередь имеет еще один дочерний бэнд Данные.

Данные на этих бэнда размещены согласно иерархии в источнике данных. Запустим отчет:

 

Таким образом мы получили связанные данные в отчете типа Master-Detail. И нам не нужно создавать специальные связи между таблицами для получения зависимостей. В случае большой вложенности данных в JSON, лучше использовать рассмотренный нами подход.

.NET .NET FastReport FastReport JSON JSON База данных База данных
10 июля 2026

Как настроить Content Security Policy для отчетов FastReport .NET WEB

Узнайте, как настроить Content Security Policy для отчётов FastReport .NET WEB: обзор директив и значений CSP, изменения в архитектуре FastReport, типичные сценарии обхода и способы защиты.
22 июня 2026

Как настроить отчет с Business Objects из кода и дизайнера в FastReport .NET

В этой статье рассматривается реальный пример создания и использования шаблона отчета .frx для подключения к иерархическим бизнес-объектам в FastReport .NET.
21 апреля 2026

Использование водяных знаков в FastReport VCL

В статье подробно рассмотрели функционал добавления водяных знаков в FastReport VCL — как через визуальный интерфейс, так и программно, с помощью кода на Delphi и в скриптах отчётов.

Не является публичной офертой
© 1998-2026 ООО «Быстрые отчеты»