Neon Integration
Neon is a powerful serialization library for Delphi that facilitates the conversion of objects and other values to and from JSON. It supports simple Delphi types as well as complex classes and records.
DEMO
You can find a demo demonstrating how serialize complex objects in the demo\13.Serialization
folder.
WiRL and Neon Integration
WiRL seamlessly integrates with Neon through its default MessageBody readers and writers. This integration allows automatic serialization and deserialization of objects in request bodies and response returns.
Configuring Neon in WiRL
You can customize Neon's behavior in WiRL using the official plugin interface. Here's an example of how to configure Neon within your WiRL server setup:
RESTServer := TWiRLServer.Create(Self);
RESTServer.AddEngine<TWiRLEngine>('/rest')
.SetEngineName('RESTEngine')
.AddApplication('/app')
.SetResources('*')
.SetFilters('*')
// Neon plugin configuration
.Plugin.Configure<IWiRLConfigurationNeon>
.SetUseUTCDate(True)
.SetVisibility([mvPublic, mvPublished])
.SetMemberCase(TNeonCase.PascalCase);
StartServerAction.Execute;
Configurable Parameters
Neon's behavior can be fine-tuned using various parameters. Each parameter is set using a corresponding Set<ParameterName>
function. Here are the key parameters:
Members
Fields
: Serialize/deserialize object fieldsProperties
: Consider only object properties
MemberCase
Controls how property names are formatted in JSON:
Unchanged
: Leaves names as-isLowerCase
: Converts to all lowercase (propertyname)UpperCase
: Converts to all uppercase (PROPERTYNAME)PascalCase
: Capitalizes the first letter of each word (PropertyName)CamelCase
: Like PascalCase, but keeps the first letter lowercase (propertyName)SnakeCase
: Separates words with underscores (Property_Name)KebabCase
: Separates words with hyphens (Property-Name)ScreamingSnakeCase
: Like SnakeCase, but in all uppercase (PROPERTY-NAME)CustomCase
: Uses a custom function specified byMemberCustomCase
MemberCustomCase
Allows you to specify a custom function for property name conversion.
Visibility
Determines which class members to include based on their visibility:
mvPrivate
: Includes private variablesmvProtected
: Includes protected variablesmvPublic
: Includes public variablesmvPublished
: Includes published variables
UseUTCDate
When set to True
, treats dates as UTC.
PrettyPrint
When enabled, generates more readable (but larger) JSON output.
Best Practices
Choose appropriate visibility: Typically, using
mvPublic
andmvPublished
is sufficient and secure for most applications.Consider date handling: If your application deals with multiple time zones, setting
UseUTCDate
toTrue
can help maintain consistency.Balance readability and performance: While
PrettyPrint
makes JSON more readable, it increases payload size. Use it judiciously, especially in high-traffic scenarios.Consistency in naming: Choose a
MemberCase
that aligns with your API design principles and stick to it across your application.