Universal.CodeGeneration.CSharp
1.3.0
See the version list below for details.
dotnet add package Universal.CodeGeneration.CSharp --version 1.3.0
NuGet\Install-Package Universal.CodeGeneration.CSharp -Version 1.3.0
<PackageReference Include="Universal.CodeGeneration.CSharp" Version="1.3.0" />
<PackageVersion Include="Universal.CodeGeneration.CSharp" Version="1.3.0" />
<PackageReference Include="Universal.CodeGeneration.CSharp" />
paket add Universal.CodeGeneration.CSharp --version 1.3.0
#r "nuget: Universal.CodeGeneration.CSharp, 1.3.0"
#:package Universal.CodeGeneration.CSharp@1.3.0
#addin nuget:?package=Universal.CodeGeneration.CSharp&version=1.3.0
#tool nuget:?package=Universal.CodeGeneration.CSharp&version=1.3.0
Universal.CodeGeneration.CSharp
A library for generating C# source code from various specifications, specializing in strongly-typed HTTP clients and URI builders.
Classes
HttpServiceClientGenerator
Generates complete, strongly-typed HTTP service client code from API specifications (such as OpenAPI/Swagger). It handles the generation of methods, request/response models, enums, and hierarchical resource navigation.
// Parse the OpenAPI JSON
string json = File.ReadAllText("openapi.json");
var spec = HttpServiceClientGenerator.ApiSpecification.FromOpenApi(json);
// Configure generation options
var options = new HttpServiceClientGenerator.Options
{
BaseClass = HttpServiceClientGenerator.BaseClientType.JsonHttpServiceClient,
GenerateModelClasses = true,
UseHierarchicalResources = true,
JsonSerializer = HttpServiceClientGenerator.JsonSerializerType.SystemTextJson
};
// Generate the code
var generator = new HttpServiceClientGenerator("MyApi.Client", "ApiClient", options);
string sourceCode = generator.Generate(spec);
Target framework compatibility
By default the generated client targets the latest BCL surface (using overloads that accept a
CancellationToken, such as HttpContent.ReadAsStringAsync(CancellationToken)). Set TargetFramework
to a target framework moniker when the generated code must compile against an older target — including
.NET Standard and .NET Framework, where those overloads do not exist:
var options = new HttpServiceClientGenerator.Options
{
BaseClass = HttpServiceClientGenerator.BaseClientType.JsonHttpServiceClient,
// e.g. "net10.0", "netstandard2.1", "netstandard2.0", "netcoreapp3.1", "net48"
TargetFramework = "netstandard2.0"
};
The moniker is resolved to BCL capability flags internally. Targets below .NET 5 (all netstandard*,
netcoreapp*, and .NET Framework monikers) omit the newer CancellationToken overloads; net5.0 and
later use them. A null, empty, or unrecognized value means "latest" and emits the newest API surface, so
it automatically tracks future .NET versions without a code change.
String enums
OpenAPI type: string enums are emitted as integer-backed C# enums (C# enums cannot be string-backed).
Each member keeps its original wire value via a [System.Runtime.Serialization.EnumMember] attribute,
and the enum is decorated with a string-enum converter matching the configured JsonSerializer
(StringEnumConverter for Newtonsoft.Json, JsonStringEnumConverter for System.Text.Json) so values
round-trip correctly. Values containing spaces or other invalid identifier characters are sanitized into
valid PascalCase member names — e.g. "IN PROGRESS" becomes InProgress:
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
public enum TaskStatus
{
[System.Runtime.Serialization.EnumMember(Value = "IN PROGRESS")]
InProgress = 0,
[System.Runtime.Serialization.EnumMember(Value = "DONE")]
DONE = 1
}
UriBuilderGenerator
Generates strongly-typed UriBuilder code from route definitions. This allows for type-safe URL construction based on defined API paths, supporting both fluent and flat API styles.
// Define routes manually or parse from OpenAPI
var routes = new List<UriBuilderGenerator.ApiRoute>
{
new UriBuilderGenerator.ApiRoute { Path = "users/{userId:int}/orders" },
new UriBuilderGenerator.ApiRoute { Path = "products/{category}/{id}" }
};
var options = new UriBuilderGenerator.Options
{
UseFluentGeneration = true,
FluentOptions = new UriBuilderGenerator.FluentGenerationOptions
{
UseNestedNamespaces = true,
CollapseIdMethods = true
}
};
var generator = new UriBuilderGenerator("MyNamespace", "MyApiRoutes", options);
string sourceCode = generator.Generate(routes);
ObjectExtensions
Extensions for converting runtime objects into their C# code initialization string representation. Useful for meta-programming and generating code that initializes objects with specific states.
// Simple types
int number = 42;
string numberCode = number.ToInitializerString(); // "42"
// Collections
var list = new List<string> { "A", "B" };
string listCode = list.ToInitializerString();
// "new List<string>() { "A", "B" }"
// Complex objects
var data = new { Id = 1, CreatedAt = DateTime.Now };
string objectCode = data.ToInitializerString();
// Generates object initialization syntax recursively
| 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
- System.Text.Json (>= 10.0.9)
- Universal.Common.Reflection (>= 2.1.1)
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.5.1 | 22 | 6/17/2026 |
| 1.5.0 | 34 | 6/17/2026 |
| 1.4.1 | 30 | 6/17/2026 |
| 1.4.0 | 32 | 6/17/2026 |
| 1.3.1 | 26 | 6/17/2026 |
| 1.3.0 | 33 | 6/17/2026 |
| 1.2.0 | 119 | 3/20/2026 |
| 1.1.1 | 476 | 12/9/2025 |
| 1.1.0 | 468 | 12/9/2025 |
| 1.0.0 | 393 | 12/8/2025 |
| 0.3.0 | 635 | 5/22/2021 |
| 0.2.1 | 567 | 2/1/2021 |
| 0.2.0 | 573 | 1/5/2021 |
| 0.1.0.1 | 806 | 3/21/2019 |
| 0.1.0 | 779 | 3/21/2019 |
Support for target framework moniker targeting.