OutWit.Common.Json
1.0.1
dotnet add package OutWit.Common.Json --version 1.0.1
NuGet\Install-Package OutWit.Common.Json -Version 1.0.1
<PackageReference Include="OutWit.Common.Json" Version="1.0.1" />
<PackageVersion Include="OutWit.Common.Json" Version="1.0.1" />
<PackageReference Include="OutWit.Common.Json" />
paket add OutWit.Common.Json --version 1.0.1
#r "nuget: OutWit.Common.Json, 1.0.1"
#:package OutWit.Common.Json@1.0.1
#addin nuget:?package=OutWit.Common.Json&version=1.0.1
#tool nuget:?package=OutWit.Common.Json&version=1.0.1
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.Json
source generation. The library provides a mechanism to register your ownJsonSerializerContext
. - Merged Context Resolver: Combines multiple
JsonSerializerContext
instances, 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.Type
objects to their assembly-qualified names.RSAParameters
: SerializesSystem.Security.Cryptography.RSAParameters
structures.
- 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
null
ordefault
and 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());
});
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 was computed. 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 (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.2.2)
- System.Text.Json (>= 8.0.5)
-
net6.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.2.2)
- System.Text.Json (>= 8.0.5)
-
net7.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.2.2)
-
net8.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.2.2)
-
net9.0
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.3)
- OutWit.Common.Aspects (>= 1.2.2)
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.