Регистрация Json данных в FastReport.NET

23.03.2015
Если вам необходимо зарегистрировать Json как источник данных в FastReport.NET, то это можно сделать через регистрацию бизнес-объектов.
Для парсинга json нужно описать схему данных в виде C# классов, например:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 public class Product
 {
 public string Name { get; set; }
 public double UnitPrice { get; set; }
 }
 
 public class Category
 {
 public string Name { get; set; }
 public string Description { get; set; }
 public List<Product> Products { get; set; }
 }
 
 string json = "..."; // строка с вашим json
 
 List<Category> categories = JsonConvert.DeserializeObject<List<Category>>(json); // используем библиотеку Newtonsoft.Json для десериализации
 
 Report report = new Report();
 report.Load(@"C:\report.frx");
 report.RegisterData(categories, "Categories");
Если же вам изначально неизвестна схема, или она изменяется в процессе работы программы, то её можно сгенерировать динамически. Для этого воспользуемся библиотекой JSON C# Class Generator, скачать её можно с сайта https://jsonclassgenerator.codeplex.com.
Код для генерации C# классов:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 string json = "..."; // строка с вашим json
 
 if (json.StartsWith("[")) // если json является массивом, то будет лучше, если мы дадим ему имя
 {
 json = "{\"Data\":" + json + "}"; // под этим название данные будут отображаться в дизайнере, таким образом, можно добавить сразу несколько источников данных
 }
 JsonClassGenerator gen = new JsonClassGenerator()
 {
 Example = json,
 UseProperties = true,
 Namespace = "__JSON__",
 MainClass = "__JSON__",
 };
 
 string source = "";
 using (StringWriter sw = new StringWriter())
 {
 gen.OutputStream = sw;
 gen.GenerateClasses();
 sw.Flush();
 source = sw.ToString(); // теперь в source находятся C# классы
 }
В результате мы получим сгенерированные классы в виде строки. Теперь к ним нужно получить доступ из кода; для этого скомпилируем их с помощью CSharpCodeProvider и получим Type:
1
2
3
4
5
6
7
8
9
10
 Type type = null;
 using (CSharpCodeProvider compiler = new CSharpCodeProvider())
 {
 CompilerParameters parameters = new CompilerParameters()
 {
 GenerateInMemory = true,
 };
 CompilerResults results = compiler.CompileAssemblyFromSource(parameters, source);
 type = results.CompiledAssembly.GetType("__JSON__.__JSON__");
 }
Внимание: в этом примере показана компиляция в текущем AppDomain. Это означает, что её нельзя выгрузить из памяти, и каждая компиляция будет отъедать память. Чтобы избежать этого, вы можете использовать CSharpCodeProvider в другом AppDomain.

С помощью сгенерированных классов десериализуем json. Проще всего это сделать, используя библиотеку Newtonsoft.Json; получить её можно через NuGet с помощью команды "Install-Package Newtonsoft.Json".
1
 object obj = JsonConvert.DeserializeObject(json, type);
Теперь, когда мы получили объекты, зарегистрируем их в FastReport.NET:
1
2
3
4
5
6
7
8
9
 PropertyInfo[] properties = type.GetProperties();
 
 Report report = new Report();
 report.Load(@"C:\report.frx");
 
 foreach (var prop in properties)
 {
 report.RegisterData((IList)prop.GetValue(obj, null), prop.Name);
 }

 Теперь вы можете запустить дизайнер и увидеть результаты.

Data

.NET FastReport .NET FastReport
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 ООО «Быстрые отчеты»