What Changed
The System.Text.Json
library is now used to process the JsonDataSource (DashboardJsonDataSource) component (instead of Newtonsoft.Json
for .NET 6+ platforms). .NET Framework apps continue to use the Newtonsoft.Json
library.
Reasons for Change
- Microsoft designed
System.Text.Json
for security standard compliance (the RFC 8259 specification) and performance (both faster and lower memory allocation). - Microsoft uses
System.Text.Json
in many of their products since the release of ASP.NET Core 3.0. Microsoft also recommends it as a long-term solution for .NET developers. For more information, please refer to Overview | Migrate from Newtonsoft.Json to System.Text.Json. - Microsoft supports System.Text.Json for .NET 6+ and .NET Framework 4.6.2+ based apps. This support allows us to use this library across a wide range of DevExpress libraries/components.
Impact on Existing Apps
JsonDataSource
(DashboardJsonDataSource
) will throw an exception during deserialization in the following instances:
- Json structure does not meet the ECMA-262 standard. For example, Json property names must be enclosed in double quotes. Single quotes or no quotes are not allowed.
- Date-time format does not meet the ISO 8601-1:2019 standard. See: DateTime and DateTimeOffset support in System.Text.Json.
- An exception occurs when defining the
JsonDataSource
(DashboardJsonDataSource
) scheme. For example, if field type is defined as Int64 (long) and the field contains fractional values, an exception will be thrown andSystem.Text.Json
will indicate that the value cannot be converted to Int64.
How to Update Existing Apps
- Ensure source Json files meet appropriate requirements (update date-time format and quotes for Json properties).
- Use the JsonDataSource.SchemaDiscoveryMaxItemCount property to extend the number of elements to analyze at each level to build the schema. Once complete, update the resulting
JsonDataSource
(DashboardJsonDataSource
) schema in the Data Source Wizard.
How to Revert to Previous Behavior
Set the DevExpress.DataAccess.Native.Json.JsonLoaderHelper.ProcessingLibrary
property to NewtonsoftJson
:
C#DevExpress.DataAccess.Native.Json.JsonLoaderHelper.ProcessingLibrary = DevExpress.DataAccess.Native.Json.JsonLoaderHelper.JsonProcessingLibrary.NewtonsoftJson