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
<PackageReference Include="Basalt.Generators.Json" Version="0.3.0" />
<PackageVersion Include="Basalt.Generators.Json" Version="0.3.0" />
<PackageReference Include="Basalt.Generators.Json" />
paket add Basalt.Generators.Json --version 0.3.0
#r "nuget: Basalt.Generators.Json, 0.3.0"
#:package Basalt.Generators.Json@0.3.0
#addin nuget:?package=Basalt.Generators.Json&version=0.3.0
#tool nuget:?package=Basalt.Generators.Json&version=0.3.0
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:
- A shared
BasaltJsonConvertersclass with all 7 converters. - A per-type partial extension adding a
BasaltJsonOptionsproperty.
[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 newJsonSerializerOptionswith 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 | Versions 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. |
-
.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.