Basalt.Generators.Json 0.3.0

dotnet add package Basalt.Generators.Json --version 0.3.0
                    
NuGet\Install-Package Basalt.Generators.Json -Version 0.3.0
                    
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="Basalt.Generators.Json" Version="0.3.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Basalt.Generators.Json" Version="0.3.0" />
                    
Directory.Packages.props
<PackageReference Include="Basalt.Generators.Json" />
                    
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 Basalt.Generators.Json --version 0.3.0
                    
#r "nuget: Basalt.Generators.Json, 0.3.0"
                    
#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 Basalt.Generators.Json@0.3.0
                    
#: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=Basalt.Generators.Json&version=0.3.0
                    
Install as a Cake Addin
#tool nuget:?package=Basalt.Generators.Json&version=0.3.0
                    
Install as a Cake Tool

Basalt.Generators.Json

Incremental source generator for AOT-compatible JSON serialization. Generates System.Text.Json converters for all Basalt blockchain primitive types and wires them into annotated types via a cached JsonSerializerOptions property.

Trigger

Annotate any partial type with [BasaltJsonSerializable] (full name: Basalt.Sdk.Contracts.BasaltJsonSerializableAttribute). The generator will emit two outputs:

  1. A shared BasaltJsonConverters class with all 7 converters.
  2. A per-type partial extension adding a BasaltJsonOptions property.
[BasaltJsonSerializable]
public partial class StatusResponse
{
    public Hash256 BlockHash { get; set; }
    public UInt256 Balance { get; set; }
}

// Generated: StatusResponse.BasaltJsonOptions returns pre-configured JsonSerializerOptions
var json = JsonSerializer.Serialize(response, StatusResponse.BasaltJsonOptions);

Generated Converters

The BasaltJsonConverters class (emitted in BasaltJsonConverters.g.cs, namespace Basalt.Generators.Json) contains 7 nested converter classes:

Converter Basalt Type JSON Format
Hash256Converter Hash256 (32 bytes) "0x" + 64 hex chars
AddressConverter Address (20 bytes) "0x" + 40 hex chars
UInt256Converter UInt256 (256-bit) Decimal string (e.g. "1000000000000000000")
SignatureConverter Signature (64 bytes) "0x" + 128 hex chars
PublicKeyConverter PublicKey (32 bytes) "0x" + 64 hex chars
BlsSignatureConverter BlsSignature (96 bytes) "0x" + 192 hex chars
BlsPublicKeyConverter BlsPublicKey (48 bytes) "0x" + 96 hex chars

All converters use ToHexString() / FromHexString() for Basalt types that natively support it (Hash256, Address), and Convert.ToHexString / Convert.FromHexString with 0x prefix handling for raw-byte types (Signature, PublicKey, BlsSignature, BlsPublicKey). UInt256 uses ToString() / Parse() for decimal representation.

Static Helpers

  • BasaltJsonConverters.CreateOptions() -- Returns a new JsonSerializerOptions with all 7 converters registered.
  • BasaltJsonConverters.AddConverters(JsonSerializerOptions) -- Adds all 7 converters to an existing options instance.

Per-Type Output

For each annotated type, the generator emits {FullyQualifiedName}.JsonOptions.g.cs containing a partial type extension with:

private static JsonSerializerOptions? _basaltJsonOptions;

public static JsonSerializerOptions BasaltJsonOptions =>
    _basaltJsonOptions ??= BasaltJsonConverters.CreateOptions();

The generator handles structs, classes, records, record structs, and nested types. The BasaltJsonOptions property is lazily initialized and cached.

Architecture

JsonGenerator implements IIncrementalGenerator. It collects all types annotated with [BasaltJsonSerializable] via ForAttributeWithMetadataName, extracts minimal type metadata into an equatable AnnotatedTypeInfo struct (with EquatableArray<string> for containing types), and emits source only when the model changes. The converter class is emitted once when at least one annotated type is found.

Dependencies

Package Purpose
Microsoft.CodeAnalysis.CSharp Roslyn compiler APIs
Microsoft.CodeAnalysis.Analyzers Analyzer development helpers

Target framework: netstandard2.0 (required for source generators).

Product 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.  net9.0 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

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
0.3.0 137 3/17/2026
0.2.0 92 2/22/2026
0.1.0 98 2/15/2026