Universal.Common.Json
1.1.0
See the version list below for details.
dotnet add package Universal.Common.Json --version 1.1.0
NuGet\Install-Package Universal.Common.Json -Version 1.1.0
<PackageReference Include="Universal.Common.Json" Version="1.1.0" />
paket add Universal.Common.Json --version 1.1.0
#r "nuget: Universal.Common.Json, 1.1.0"
// Install Universal.Common.Json as a Cake Addin #addin nuget:?package=Universal.Common.Json&version=1.1.0 // Install Universal.Common.Json as a Cake Tool #tool nuget:?package=Universal.Common.Json&version=1.1.0
Universal.Common.Json
This package provides JSON Schema functionality according to the Draft 2020-12 specification, including a JsonSchema
class for direct schema manipulation and a JsonSchemaConverter
for automatically generating schemas from .NET types.
Features
- Full support for JSON Schema Draft 2020-12
- Serialization and deserialization using both Newtonsoft.Json and System.Text.Json
- Extension data support for custom keywords
- Automatic schema generation from .NET types
- Support for data annotation attributes
Usage
Creating Schemas Manually
Here's a basic example of how to create and serialize a JSON Schema:
using Universal.Common.Json;
using System.Text.Json;
var schema = new JsonSchema
{
Title = "Person",
Type = "object",
Properties = new Dictionary<string, JsonSchema>
{
["name"] = new JsonSchema { Type = "string" },
["age"] = new JsonSchema { Type = "integer", Minimum = 0 },
["email"] = new JsonSchema { Type = "string", Format = "email" }
},
Required = new[] { "name", "email" }
};
string jsonString = JsonSerializer.Serialize(schema);
Console.WriteLine(jsonString);
Generating Schemas from .NET Types
You can automatically generate JSON Schemas from your .NET classes using the JsonSchemaConverter
:
using Universal.Common.Json;
using System.ComponentModel.DataAnnotations;
// Define your model with validation attributes
public class Person
{
[Required]
[StringLength(50, MinimumLength = 2)]
public string Name { get; set; }
[Range(0, 120)]
public int Age { get; set; }
[Required]
[RegularExpression(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$")]
public string Email { get; set; }
[MinLength(1)]
[MaxLength(10)]
public List<string> Tags { get; set; }
}
// Generate schema
var converter = new JsonSchemaConverter();
JsonSchema schema = converter.Convert<Person>();
Supported Validation Attributes
The JsonSchemaConverter
supports the following validation attributes:
[Required]
- Marks properties as required in the schema[StringLength]
- Sets minimum and maximum string length[MinLength]
,[MaxLength]
- Sets collection size constraints[Range]
- Sets minimum and maximum numeric values[RegularExpression]
- Sets string patterns[JsonPropertyName]
- Customizes property names in the schema[Description]
- Adds property descriptions to the schema
Deserialization
You can deserialize existing JSON Schema strings into JsonSchema
objects:
string jsonString = @"{
""$schema"": ""https://json-schema.org/draft/2020-12/schema"",
""title"": ""Person"",
""type"": ""object"",
""properties"": {
""name"": { ""type"": ""string"" },
""age"": { ""type"": ""integer"", ""minimum"": 0 },
""email"": { ""type"": ""string"", ""format"": ""email"" }
},
""required"": [""name"", ""email""]
}";
JsonSchema schema = JsonSerializer.Deserialize<JsonSchema>(jsonString);
Special Cases
The converter handles several special cases:
- Collections (
IEnumerable<T>
,List<T>
, arrays) are converted to array schemas - Objects marked with
[JsonObject]
are treated as objects even if they implement collection interfaces - Nullable types are supported
- Nested objects are automatically converted to nested schemas
- Both System.Text.Json and Newtonsoft.Json attributes are respected
Example with Complex Types
public class Order
{
[Required]
public string OrderId { get; set; }
[Required]
public Customer Customer { get; set; }
[MinLength(1)]
public List<OrderItem> Items { get; set; }
[Range(0, double.MaxValue)]
public decimal TotalAmount { get; set; }
}
public class Customer
{
[Required]
[StringLength(100)]
public string Name { get; set; }
[Required]
[RegularExpression(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$")]
public string Email { get; set; }
}
public class OrderItem
{
[Required]
public string ProductId { get; set; }
[Range(1, int.MaxValue)]
public int Quantity { get; set; }
}
// Generate schema for the entire object graph
var converter = new JsonSchemaConverter();
JsonSchema orderSchema = converter.Convert<Order>();
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 was computed. 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. |
.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 was computed. 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. |
-
.NETStandard 2.0
- Newtonsoft.Json (>= 13.0.3)
- System.ComponentModel.Annotations (>= 5.0.0)
- System.Text.Json (>= 8.0.5)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Universal.Common.Json:
Package | Downloads |
---|---|
Universal.OpenAI.Client
Class library for interacting with OpenAI APIs. |
|
Universal.Anthropic.Client
Class library for interacting with the Anthropic REST API. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Added support for converting types to JsonSchema.