# JsonEvalRs - C# Bindings
High-performance JSON Logic evaluator with schema validation and dependency tracking for .NET applications.
## Features
- 🚀 **Blazing Fast** - Built on Rust for maximum performance
- ✅ **Schema Validation** - Validate data against JSON schema rules
- 🔄 **Dependency Tracking** - Auto-update dependent fields
- 🎯 **Type Safe** - Full .NET type safety with JSON.NET integration
- 📦 **Cross-Platform** - Works on Windows, Linux, and macOS
- 🔌 **Easy Integration** - Simple API, just a few lines of code
## Installation
```bash
dotnet add package JsonEvalRs
```
Or via NuGet Package Manager:
```
Install-Package JsonEvalRs
```
## Quick Start
```csharp
using JsonEvalRs;
using Newtonsoft.Json.Linq;
// Create evaluator with schema
string schema = @"{
""type"": ""object"",
""properties"": {
""user"": {
""type"": ""object"",
""properties"": {
""name"": {
""type"": ""string"",
""rules"": {
""required"": { ""value"": true, ""message"": ""Name is required"" },
""minLength"": { ""value"": 3, ""message"": ""Min 3 characters"" }
}
},
""age"": {
""type"": ""number"",
""rules"": {
""minValue"": { ""value"": 18, ""message"": ""Must be 18+"" }
}
}
}
}
}
}";
using (var eval = new JSONEval(schema))
{
// Evaluate
string data = @"{ ""user"": { ""name"": ""John"", ""age"": 25 } }";
JObject result = eval.Evaluate(data);
Console.WriteLine($"Evaluated: {result}");
// Validate
ValidationResult validation = eval.Validate(data);
if (validation.HasError)
{
foreach (var error in validation.Errors)
{
Console.WriteLine($"{error.Path}: {error.Message}");
}
}
// Re-evaluate after changes
string updatedData = @"{ ""user"": { ""name"": ""John"", ""age"": 30 } }";
JObject updated = eval.EvaluateDependents(
new List<string> { "user.age" },
updatedData,
nested: true
);
}
```
## API Reference
### JSONEval Constructor
```csharp
public JSONEval(string schema, string context = null, string data = null)
```
Creates a new evaluator instance.
**Parameters:**
- `schema` (string): JSON schema definition
- `context` (string, optional): Context data for evaluations
- `data` (string, optional): Initial data
### Evaluate Method
```csharp
public JObject Evaluate(string data, string context = null)
```
Evaluates the schema with provided data.
**Parameters:**
- `data` (string): JSON data to evaluate
- `context` (string, optional): Context data
**Returns:** JObject with evaluated schema
### Validate Method
```csharp
public ValidationResult Validate(string data, string context = null)
```
Validates data against schema rules.
**Parameters:**
- `data` (string): JSON data to validate
- `context` (string, optional): Context data
**Returns:** ValidationResult with errors (if any)
### EvaluateDependents Method
```csharp
public JObject EvaluateDependents(
List<string> changedPaths,
string data,
string context = null,
bool nested = true
)
```
Re-evaluates fields that depend on changed paths.
**Parameters:**
- `changedPaths` (List<string>): Paths that changed
- `data` (string): Updated data
- `context` (string, optional): Context data
- `nested` (bool): Follow dependency chains recursively
**Returns:** JObject with updated evaluated schema
## Validation Rules
Supported validation rules:
- **required** - Field must have a value
- **minLength** / **maxLength** - String/array length validation
- **minValue** / **maxValue** - Numeric range validation
- **pattern** - Regex pattern matching
## Platform Support
- **.NET Standard 2.0+** - Compatible with .NET Framework 4.6.1+
- **.NET 6/7/8** - Latest .NET versions
- **Windows** - x64
- **Linux** - x64
- **macOS** - x64, ARM64
## Performance
Typical performance characteristics:
- Schema parsing: < 5ms
- Evaluation: < 10ms for complex schemas
- Validation: < 5ms
## Error Handling
All methods throw `JsonEvalException` on errors:
```csharp
try
{
var result = eval.Evaluate(data);
}
catch (JsonEvalException ex)
{
Console.WriteLine($"Evaluation error: {ex.Message}");
}
```
## Memory Management
`JSONEval` implements `IDisposable`. Always dispose instances:
```csharp
using (var eval = new JSONEval(schema))
{
// Use eval
} // Automatically disposed
// Or manually
var eval = new JSONEval(schema);
try
{
// Use eval
}
finally
{
eval.Dispose();
}
```
## License
MIT License
## Support
- GitHub Issues: https://github.com/byrizki/jsoneval-rs/issues
- Documentation: https://github.com/byrizki/jsoneval-rs
## Version
```csharp
string version = JSONEval.Version;
Console.WriteLine($"JsonEvalRs version: {version}");
```