OutWit.Common.Json
1.1.3
dotnet add package OutWit.Common.Json --version 1.1.3
NuGet\Install-Package OutWit.Common.Json -Version 1.1.3
<PackageReference Include="OutWit.Common.Json" Version="1.1.3" />
<PackageVersion Include="OutWit.Common.Json" Version="1.1.3" />
<PackageReference Include="OutWit.Common.Json" />
paket add OutWit.Common.Json --version 1.1.3
#r "nuget: OutWit.Common.Json, 1.1.3"
#:package OutWit.Common.Json@1.1.3
#addin nuget:?package=OutWit.Common.Json&version=1.1.3
#tool nuget:?package=OutWit.Common.Json&version=1.1.3
OutWit.Common.Json
This library enhances System.Text.Json by providing a set of intuitive extension methods and a powerful, performance-oriented architecture.
Key Features
- Fluent Extension Methods: Simplifies serialization and deserialization to and from strings and byte arrays.
- Source Generation Ready: Boost performance and reduce memory allocation by using
System.Text.Jsonsource generation. The library provides a mechanism to register your ownJsonSerializerContext. - Merged Context Resolver: Combines multiple
JsonSerializerContextinstances, falling back to reflection if a type is not found in any registered context. This gives you the performance of source generation with the flexibility of reflection. - Built-in Default Context: Comes with a pre-configured context for a wide range of primitive types, arrays, and lists, so it works great out of the box.
- Custom Converters Included:
Type: SerializesSystem.Typeobjects to their assembly-qualified names.RSAParameters: SerializesSystem.Security.Cryptography.RSAParametersstructures.
- File I/O Helpers: Easily export collections to JSON files or load them back, with both synchronous and asynchronous methods available.
- Graceful Error Handling: Methods safely handle exceptions during serialization/deserialization, returning
nullordefaultand optionally logging errors viaMicrosoft.Extensions.Logging. - Deep Cloning: A simple
JsonClone()extension method to create a deep copy of an object.
Installation
Install the package from NuGet:
Install-Package OutWit.Common.Json
Or via the .NET CLI:
dotnet add package OutWit.Common.Json
Basic Usage
The library provides easy-to-use extension methods for any object.
using OutWit.Common.Json;
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
var user = new User { Id = 1, Name = "John Doe" };
// Serialize to a JSON string
string json = user.ToJsonString(); // {"Id":1,"Name":"John Doe"}
// Serialize to an indented JSON string
string indentedJson = user.ToJsonString(indented: true);
/*
{
"Id": 1,
"Name": "John Doe"
}
*/
// Deserialize from a JSON string
var deserializedUser = json.FromJsonString<User>();
// Create a deep clone of the object
var clonedUser = user.JsonClone();
Advanced Usage: Using Source Generation
For optimal performance, especially in AOT (Ahead-of-Time) compiled scenarios, you can use your own source-generated JsonSerializerContext.
1. Define your data models and a JsonSerializerContext:
using System.Text.Json.Serialization;
namespace MyApp.Models
{
public class Product
{
public string Sku { get; set; }
public decimal Price { get; set; }
}
// Define a context for your types
[JsonSerializable(typeof(Product))]
[JsonSerializable(typeof(Product[]))]
internal partial class AppJsonContext : JsonSerializerContext
{
}
}
2. Register your context at application startup:
using OutWit.Common.Json;
using MyApp.Models;
public static class Program
{
public static void Main(string[] args)
{
// Register your context with OutWit.Common.Json
JsonUtils.Register(new AppJsonContext());
// Now, all serialization calls will use your generated context
// for the Product type, falling back for other types.
var product = new Product { Sku = "ABC-123", Price = 99.99m };
string json = product.ToJsonString();
System.Console.WriteLine(json);
}
}
You can also use the optionsBuilder to register multiple contexts.
JsonUtils.Register(options =>
{
options.Contexts.Add(new AppJsonContext());
options.Contexts.Add(new AnotherContext());
});
License
Licensed under the Apache License, Version 2.0. See LICENSE.
Attribution (optional)
If you use OutWit.Common.Json in a product, a mention is appreciated (but not required), for example: "Powered by OutWit.Common.Json (https://ratner.io/)".
Trademark / Project name
"OutWit" and the OutWit logo are used to identify the official project by Dmitry Ratner.
You may:
- refer to the project name in a factual way (e.g., "built with OutWit.Common.Json");
- use the name to indicate compatibility (e.g., "OutWit.Common.Json-compatible").
You may not:
- use "OutWit.Common.Json" as the name of a fork or a derived product in a way that implies it is the official project;
- use the OutWit.Common.Json logo to promote forks or derived products without permission.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. 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 is compatible. 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 is compatible. 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 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
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.2)
- OutWit.Common.Aspects (>= 1.3.3)
- System.Text.Json (>= 10.0.2)
-
net10.0
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.2)
- OutWit.Common.Aspects (>= 1.3.3)
-
net6.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.3.3)
- System.Text.Json (>= 8.0.5)
-
net7.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.3.3)
- System.Text.Json (>= 8.0.5)
-
net8.0
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.8)
- OutWit.Common.Aspects (>= 1.3.3)
- System.Text.Json (>= 10.0.0)
-
net9.0
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.8)
- OutWit.Common.Aspects (>= 1.3.3)
- System.Text.Json (>= 10.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on OutWit.Common.Json:
| Package | Downloads |
|---|---|
|
OutWit.Communication
The core communication library of the WitRPC framework, providing base RPC functionality such as messaging, dynamic proxy support, and extensibility for multiple transports, serialization formats, and encryption. |
GitHub repositories
This package is not used by any popular GitHub repositories.