ktsu.SerializationProviders.SystemTextJson 1.0.4

Prefix Reserved
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package ktsu.SerializationProviders.SystemTextJson --version 1.0.4
                    
NuGet\Install-Package ktsu.SerializationProviders.SystemTextJson -Version 1.0.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ktsu.SerializationProviders.SystemTextJson" Version="1.0.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ktsu.SerializationProviders.SystemTextJson" Version="1.0.4" />
                    
Directory.Packages.props
<PackageReference Include="ktsu.SerializationProviders.SystemTextJson" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ktsu.SerializationProviders.SystemTextJson --version 1.0.4
                    
#r "nuget: ktsu.SerializationProviders.SystemTextJson, 1.0.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ktsu.SerializationProviders.SystemTextJson@1.0.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ktsu.SerializationProviders.SystemTextJson&version=1.0.4
                    
Install as a Cake Addin
#tool nuget:?package=ktsu.SerializationProviders.SystemTextJson&version=1.0.4
                    
Install as a Cake Tool

ktsu Common Providers

A comprehensive collection of provider implementations for the ktsu ecosystem. This library provides standardized implementations of interfaces defined in ktsu.Abstractions, enabling consistent patterns across serialization, hashing, compression, encryption, file system access, and obfuscation.

Available Providers

Serialization Providers

Implementations of ISerializationProvider for popular JSON libraries:

Package Description
ktsu.SerializationProviders.NewtonsoftJson Newtonsoft.Json (Json.NET) provider
ktsu.SerializationProviders.SystemTextJson System.Text.Json provider

Hash Providers

Implementations of IHashProvider for cryptographic and non-cryptographic hash algorithms:

Package Hash Length Description
ktsu.HashProviders.MD5 16 bytes MD5 hash algorithm
ktsu.HashProviders.SHA1 20 bytes SHA-1 hash algorithm
ktsu.HashProviders.SHA256 32 bytes SHA-256 hash algorithm
ktsu.HashProviders.SHA384 48 bytes SHA-384 hash algorithm
ktsu.HashProviders.SHA512 64 bytes SHA-512 hash algorithm
ktsu.HashProviders.FNV1_32 4 bytes FNV-1 32-bit non-cryptographic hash
ktsu.HashProviders.FNV1a_32 4 bytes FNV-1a 32-bit non-cryptographic hash
ktsu.HashProviders.FNV1_64 8 bytes FNV-1 64-bit non-cryptographic hash
ktsu.HashProviders.FNV1a_64 8 bytes FNV-1a 64-bit non-cryptographic hash

Compression Providers

Implementations of ICompressionProvider:

Package Description
ktsu.CompressionProviders.Gzip Gzip compression/decompression

Encryption Providers

Implementations of IEncryptionProvider:

Package Description
ktsu.EncryptionProviders.Aes AES symmetric encryption

File System Providers

Implementations of IFileSystemProvider:

Package Description
ktsu.FileSystemProviders.Native Native file system operations

Obfuscation Providers

Implementations of IObfuscationProvider:

Package Description
ktsu.ObfuscationProviders.Base64 Base64 encoding/decoding

Installation

Install the specific provider packages you need:

# Serialization
dotnet add package ktsu.SerializationProviders.NewtonsoftJson
dotnet add package ktsu.SerializationProviders.SystemTextJson

# Hashing
dotnet add package ktsu.HashProviders.SHA256
dotnet add package ktsu.HashProviders.MD5
# ... other hash providers

# Compression
dotnet add package ktsu.CompressionProviders.Gzip

# Encryption
dotnet add package ktsu.EncryptionProviders.Aes

# File System
dotnet add package ktsu.FileSystemProviders.Native

# Obfuscation
dotnet add package ktsu.ObfuscationProviders.Base64

Usage

Serialization

using ktsu.Abstractions;
using ktsu.SerializationProviders.SystemTextJson;

ISerializationProvider serializer = new SystemTextJson();

// Serialize
using var writer = new StringWriter();
if (serializer.TrySerialize(myObject, writer))
{
    string json = writer.ToString();
}

// Deserialize
byte[] jsonBytes = Encoding.UTF8.GetBytes(jsonString);
var result = serializer.Deserialize<MyClass>(jsonBytes.AsSpan());

Hashing

using ktsu.Abstractions;
using ktsu.HashProviders.SHA256;

using IHashProvider hasher = new SHA256();

byte[] data = Encoding.UTF8.GetBytes("Hello, World!");
Span<byte> hash = stackalloc byte[hasher.HashLengthBytes];

if (hasher.TryHash(data, hash))
{
    string hashHex = Convert.ToHexString(hash);
}

// Hash from stream
using var stream = File.OpenRead("file.txt");
if (hasher.TryHash(stream, hash))
{
    // hash contains the file hash
}

Compression

using ktsu.Abstractions;
using ktsu.CompressionProviders.Gzip;

ICompressionProvider compressor = new Gzip();

byte[] original = Encoding.UTF8.GetBytes("Data to compress");

// Compress
if (compressor.TryCompress(original, out byte[] compressed))
{
    // Use compressed data
}

// Decompress
if (compressor.TryDecompress(compressed, out byte[] decompressed))
{
    string text = Encoding.UTF8.GetString(decompressed);
}

Encryption

using ktsu.Abstractions;
using ktsu.EncryptionProviders.Aes;

using IEncryptionProvider encryptor = new Aes();

byte[] key = new byte[32]; // 256-bit key
byte[] iv = new byte[16];  // 128-bit IV
RandomNumberGenerator.Fill(key);
RandomNumberGenerator.Fill(iv);

byte[] plaintext = Encoding.UTF8.GetBytes("Secret message");

// Encrypt
if (encryptor.TryEncrypt(plaintext, key, iv, out byte[] ciphertext))
{
    // Store or transmit ciphertext
}

// Decrypt
if (encryptor.TryDecrypt(ciphertext, key, iv, out byte[] decrypted))
{
    string message = Encoding.UTF8.GetString(decrypted);
}

Dependency Injection

All providers integrate seamlessly with Microsoft.Extensions.DependencyInjection:

using Microsoft.Extensions.DependencyInjection;
using ktsu.Abstractions;

var services = new ServiceCollection();

// Register specific providers
services.AddSingleton<ISerializationProvider, SystemTextJson>();
services.AddSingleton<IHashProvider, SHA256>();
services.AddSingleton<ICompressionProvider, Gzip>();
services.AddSingleton<IEncryptionProvider, Aes>();
services.AddSingleton<IFileSystemProvider, Native>();
services.AddSingleton<IObfuscationProvider, Base64>();

var provider = services.BuildServiceProvider();

// Resolve and use
var serializer = provider.GetRequiredService<ISerializationProvider>();
var hasher = provider.GetRequiredService<IHashProvider>();

Features

  • Consistent APIs - All providers implement standardized interfaces from ktsu.Abstractions
  • Graceful Error Handling - Methods return success/failure indicators rather than throwing exceptions
  • Multi-Target Support - .NET 9.0, 8.0, 7.0, 6.0, and .NET Standard 2.1
  • Dependency Injection Ready - Easy integration with DI containers
  • Provider Pattern - Swap implementations without changing consumer code
  • Disposable Resources - Providers that hold resources implement IDisposable

Error Handling

All providers follow consistent error handling patterns:

// Hash providers return false on failure
if (!hasher.TryHash(data, destination))
{
    // Handle failure (buffer too small, disposed, etc.)
}

// Serialization returns false/default on failure
if (!serializer.TrySerialize(obj, writer))
{
    // Handle serialization failure
}

var result = serializer.Deserialize<MyClass>(invalidData);
if (result == null)
{
    // Handle deserialization failure
}

// Compression/Encryption use out parameters
if (!compressor.TryCompress(data, out byte[] compressed))
{
    // Handle compression failure
}

Requirements

  • .NET 9.0, 8.0, 7.0, 6.0, or .NET Standard 2.1
  • ktsu.Abstractions package

License

Licensed under the MIT License. See LICENSE.md for details.

Contributing

Contributions are welcome! Please feel free to submit issues and pull requests.

Product 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 netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.5-pre.3 0 1/31/2026
1.0.5-pre.2 0 1/31/2026
1.0.5-pre.1 0 1/31/2026
1.0.4 29 1/30/2026
1.0.3 55 1/29/2026
1.0.3-pre.4 41 1/24/2026
1.0.3-pre.3 149 11/24/2025
1.0.3-pre.2 119 11/23/2025
1.0.3-pre.1 124 11/23/2025
1.0.2 215 11/14/2025
1.0.1 348 8/14/2025
1.0.1-pre.1 151 8/12/2025
1.0.0 175 8/11/2025

## v1.0.4 (patch)

Changes since v1.0.3:

- Remove .github\workflows\project.yml ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.3 (patch)

Changes since v1.0.2:

- Change project SDK from Microsoft.NET.Sdk to MSTest.Sdk ([@matt-edmondson](https://github.com/matt-edmondson))
- Update target framework to net10.0 and adjust assertions in tests ([@matt-edmondson](https://github.com/matt-edmondson))
- Update docs and api compatibility files ([@matt-edmondson](https://github.com/matt-edmondson))
- Add project references and update AssemblyInfo for testing and source linking ([@matt-edmondson](https://github.com/matt-edmondson))
- Add CLAUDE.md for project guidance and documentation ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.3-pre.4 (prerelease)

Changes since v1.0.3-pre.3:

- Sync .github\workflows\update-sdks.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
- Sync .gitignore ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.3-pre.3 (prerelease)

Changes since v1.0.3-pre.2:

- Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.3-pre.2 (prerelease)

Changes since v1.0.3-pre.1:

- Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot]))
## v1.0.3-pre.1 (prerelease)

Incremental prerelease update.
## v1.0.2 (patch)

Changes since v1.0.1:

- Add .runsettings file for coverage configuration, update GitHub Actions workflow to handle skipped releases, and enhance PSBuild script for coverage file handling. Update winget manifest script to detect NuGet packages and refine project type checks. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.1 (patch)

Changes since v1.0.0:

- Add SHA384 and SHA512 hash providers, along with FNV1_32, FNV1a_32, FNV1_64, and FNV1a_64 implementations. Update Common.sln and add corresponding unit tests for all new providers. Enhance existing tests for dependency injection and serialization. Include necessary project files and suppressions for compatibility. ([@matt-edmondson](https://github.com/matt-edmondson))
## v1.0.1-pre.1 (prerelease)

Incremental prerelease update.
## v1.0.0 (major)

- Add MD5HashProvider implementation and project files ([@matt-edmondson](https://github.com/matt-edmondson))
- Initial commit ([@matt-edmondson](https://github.com/matt-edmondson))