RuleWright.Json.SystemText
1.0.3
dotnet add package RuleWright.Json.SystemText --version 1.0.3
NuGet\Install-Package RuleWright.Json.SystemText -Version 1.0.3
<PackageReference Include="RuleWright.Json.SystemText" Version="1.0.3" />
<PackageVersion Include="RuleWright.Json.SystemText" Version="1.0.3" />
<PackageReference Include="RuleWright.Json.SystemText" />
paket add RuleWright.Json.SystemText --version 1.0.3
#r "nuget: RuleWright.Json.SystemText, 1.0.3"
#:package RuleWright.Json.SystemText@1.0.3
#addin nuget:?package=RuleWright.Json.SystemText&version=1.0.3
#tool nuget:?package=RuleWright.Json.SystemText&version=1.0.3
RuleWright.Json.SystemText
The System.Text.Json adapter for RuleWright:
implements IRuleJsonReader so the engine can read rule documents, plus helpers for using
JSON payloads as facts.
Install
dotnet add package RuleWright.Json.SystemText
Already included in RuleWright — install
this directly only if you reference RuleWright.Execution piecewise. Prefer
RuleWright.Json.NewtonsoftJson
if your application already standardises on Newtonsoft.Json; the two are parity-tested against
each other, and swapping adapters is the only change.
Read rule documents
var engine = new RuleWrightBuilder()
.UseJsonReader(new SystemTextJsonReader())
.Build();
Comments and trailing commas are tolerated, so hand-written rule files stay pleasant to edit.
Malformed JSON surfaces as RuleParseException.
Use a JSON payload as a fact
SystemTextJsonFacts.ToDictionary converts a JsonElement into the dictionary shape the
engine's interpreter evaluates — useful when facts arrive as JSON over HTTP and there is no
CLR type to bind them to.
using JsonDocument payload = JsonDocument.Parse(requestBody);
Dictionary<string, object?> fact = SystemTextJsonFacts.ToDictionary(payload.RootElement);
RuleEvaluationResult result = engine.Evaluate(ruleSet, fact);
// result.CompilationMode == CompilationMode.Interpreted
Nested objects become nested dictionaries and arrays become object?[]. Numbers become long
when integral, otherwise decimal when exactly representable, otherwise double — the same
policy the rule parser applies to constants, so a fact and a rule constant of the same JSON
text compare as equal.
Keys match exactly by default, and a rule's Order.Total does not find a camelCase
"order": { "total": … } — which is what most web clients send. Pass a key comparer to match
without regard to case, at every level:
Dictionary<string, object?> fact = SystemTextJsonFacts.ToDictionary(payload.RootElement, StringComparer.OrdinalIgnoreCase);
Two properties of one object that the comparer treats as the same key ("Total" and "total")
throw ArgumentException rather than one silently replacing the other.
Requirements
.NET Framework 4.8, .NET Standard 2.0, .NET 8.0 or .NET 10.0. System.Text.Json is in-box from .NET 8 on; the down-level legs take a package reference for it.
Documentation
📖 RuleWright documentation ·
JSON adapters ·
API reference: RuleWright.Json.SystemText
Contact
Questions, support or licensing: salwan@albahadly.com · www.albahadly.com
License
MIT.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 is compatible. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.8
- RuleWright.Serialization (>= 1.0.3)
- System.Text.Json (>= 10.0.10)
-
.NETStandard 2.0
- RuleWright.Serialization (>= 1.0.3)
- System.Text.Json (>= 10.0.10)
-
net10.0
- RuleWright.Serialization (>= 1.0.3)
-
net8.0
- RuleWright.Serialization (>= 1.0.3)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on RuleWright.Json.SystemText:
| Package | Downloads |
|---|---|
|
RuleWright
The RuleWright rule engine — everything you need in one package: the core domain model, JSON parsing and schema validation, the expression-tree evaluation engine, the System.Text.Json adapter, and the built-in custom functions. Rules are plain JSON; evaluation is compiled expression trees. Install this unless you want to pick pieces individually. |
GitHub repositories
This package is not used by any popular GitHub repositories.
See https://github.com/albahadly/rulewright/releases for release notes.