ktsu.SerializationProviders.SystemTextJson
1.0.4
Prefix Reserved
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
<PackageReference Include="ktsu.SerializationProviders.SystemTextJson" Version="1.0.4" />
<PackageVersion Include="ktsu.SerializationProviders.SystemTextJson" Version="1.0.4" />
<PackageReference Include="ktsu.SerializationProviders.SystemTextJson" />
paket add ktsu.SerializationProviders.SystemTextJson --version 1.0.4
#r "nuget: ktsu.SerializationProviders.SystemTextJson, 1.0.4"
#:package ktsu.SerializationProviders.SystemTextJson@1.0.4
#addin nuget:?package=ktsu.SerializationProviders.SystemTextJson&version=1.0.4
#tool nuget:?package=ktsu.SerializationProviders.SystemTextJson&version=1.0.4
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 | 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 | 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. |
-
.NETStandard 2.1
- ktsu.Abstractions (>= 1.0.12)
- System.Text.Json (>= 10.0.2)
-
net10.0
- ktsu.Abstractions (>= 1.0.12)
-
net6.0
- ktsu.Abstractions (>= 1.0.12)
- System.Text.Json (>= 10.0.2)
-
net7.0
- ktsu.Abstractions (>= 1.0.12)
- System.Text.Json (>= 10.0.2)
-
net8.0
- ktsu.Abstractions (>= 1.0.12)
- System.Text.Json (>= 10.0.2)
-
net9.0
- ktsu.Abstractions (>= 1.0.12)
- System.Text.Json (>= 10.0.2)
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))