Meziantou.Framework.StronglyTypedId
1.0.33
Prefix Reserved
See the version list below for details.
dotnet add package Meziantou.Framework.StronglyTypedId --version 1.0.33
NuGet\Install-Package Meziantou.Framework.StronglyTypedId -Version 1.0.33
<PackageReference Include="Meziantou.Framework.StronglyTypedId" Version="1.0.33"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="Meziantou.Framework.StronglyTypedId" Version="1.0.33" />
<PackageReference Include="Meziantou.Framework.StronglyTypedId"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add Meziantou.Framework.StronglyTypedId --version 1.0.33
#r "nuget: Meziantou.Framework.StronglyTypedId, 1.0.33"
#:package Meziantou.Framework.StronglyTypedId@1.0.33
#addin nuget:?package=Meziantou.Framework.StronglyTypedId&version=1.0.33
#tool nuget:?package=Meziantou.Framework.StronglyTypedId&version=1.0.33
Meziantou.Framework.StronglyTypedId
The source generator generates constructors, properties, equality members, common interfaces, converters for multiple serializers
[StronglyTypedId(typeof(int))]
public partial struct ProjectId { }
StronglyTypedId generates the following code:
[System.ComponentModel.TypeConverterAttribute(typeof(ProjectIdTypeConverter))]
[System.Text.Json.Serialization.JsonConverterAttribute(typeof(ProjectIdJsonConverter))]
[Newtonsoft.Json.JsonConverterAttribute(typeof(ProjectIdNewtonsoftJsonConverter))]
[MongoDB.Bson.Serialization.Attributes.BsonSerializerAttribute(typeof(ProjectIdMongoDBBsonSerializer))]
public partial struct ProjectId :
System.IEquatable<ProjectId>,
System.IParsable<ProjectId>, // .NET 7+
System.ISpanParsable<ProjectId>, // .NET 7+
IStronglyTypedId, // When Meziantou.Framework.StronglyTypedId.Interfaces is referenced
IStronglyTypedId<ProjectId>, // When Meziantou.Framework.StronglyTypedId.Interfaces is referenced
IComparable, IComparable<ProjectId> // When at least one of the interface is explicitly defined by the user
{
public int Value { get; }
public string ValueAsString { get; } // Value formatted using InvariantCulture
private ProjectId(int value);
public static ProjectId FromInt32(int value);
public static ProjectId Parse(string value);
public static ProjectId Parse(ReadOnlySpan<char> value);
public static bool TryParse(string value, out ProjectId result);
public static bool TryParse(ReadOnlySpan<char> value, out ProjectId result);
public override int GetHashCode();
public override bool Equals(object? other);
public bool Equals(ProjectId other);
public static bool operator ==(ProjectId a, ProjectId b);
public static bool operator !=(ProjectId a, ProjectId b);
public override string ToString();
private partial class CustomerIdTypeConverter : System.ComponentModel.TypeConverter
{
public override bool CanConvertFrom(System.ComponentModel.ITypeDescriptorContext context, System.Type sourceType);
public override object? ConvertFrom(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value);
public override bool CanConvertTo(System.ComponentModel.ITypeDescriptorContext context, System.Type destinationType);
public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, System.Type destinationType);
}
// Generated only when System.Text.Json is accessible
private partial class CustomerIdJsonConverter : System.Text.Json.Serialization.JsonConverter<ProjectId>
{
public override void Write(System.Text.Json.Utf8JsonWriter writer, ProjectId value, System.Text.Json.JsonSerializerOptions options);
public override ProjectId Read(ref System.Text.Json.Utf8JsonReader reader, System.Type typeToConvert, System.Text.Json.JsonSerializerOptions options);
}
// Generated only when Newtonsoft.Json is accessible
private partial class CustomerIdNewtonsoftJsonConverter : Newtonsoft.Json.JsonConverter
{
public override bool CanRead { get; }
public override bool CanWrite { get; }
public override bool CanConvert(System.Type type);
public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object? value, Newtonsoft.Json.JsonSerializer serializer);
public override object ReadJson(Newtonsoft.Json.JsonReader reader, System.Type objectType, object? existingValue, Newtonsoft.Json.JsonSerializer serializer);
}
// Generated only when MongoDB.Bson.Serialization.Serializers.SerializerBase is accessible
private partial class ProjectIdMongoDBBsonSerializer : MongoDB.Bson.Serialization.Serializers.SerializerBase<ProjectId>
{
public override ProjectId Deserialize(MongoDB.Bson.Serialization.BsonDeserializationContext context, MongoDB.Bson.Serialization.BsonDeserializationArgs args);
public override void Serialize(MongoDB.Bson.Serialization.BsonSerializationContext context, MongoDB.Bson.Serialization.BsonSerializationArgs args, ProjectId value);
}
}
If the Meziantou.Framework.StronglyTypedId.Interfaces NuGet package is present, the generator will implements IStronglyTypedId and IStronglyTypedId<T>.
Supported types
System.BooleanSystem.ByteSystem.DateTimeSystem.DateTimeOffsetSystem.DecimalSystem.DoubleSystem.GuidSystem.HalfSystem.Int16System.Int32System.Int64System.Int128System.Numerics.BigIntegerSystem.SByteSystem.SingleSystem.StringSystem.Uint16System.Uint32System.Uint64System.Uint128MongoDB.Bson.ObjectId
Configuration
You can configure the code generation using the [StronglyTypedIdAttribute] attribute:
[StronglyTypedId(idType: typeof(long),
generateSystemTextJsonConverter: true,
generateNewtonsoftJsonConverter: true,
generateSystemComponentModelTypeConverter: true,
generateMongoDBBsonSerialization: true,
addCodeGeneratedAttribute: true
)]
public partial struct ProjectId { }
You can generate IComparable, IComparable<T> and comparison operators by adding one interface:
[StronglyTypedId(typeof(int))]
public partial struct ProjectId : IComparable { }
// Generated by the source generator
public partial struct ProjectId : IComparable<ProjectId>
{
public int CompareTo(object? other);
public int CompareTo(ProjectId? other);
public static bool operator <(ProjectId? left, ProjectId? right);
public static bool operator <=(IdInt32Comparable? left, IdInt32Comparable? right);
public static bool operator >(IdInt32Comparable? left, IdInt32Comparable? right);
public static bool operator >=(IdInt32Comparable? left, IdInt32Comparable? right);
}
Additional resources
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
-
net6.0
- No dependencies.
-
net7.0
- No dependencies.
NuGet packages (34)
Showing the top 5 NuGet packages that depend on Meziantou.Framework.StronglyTypedId:
| Package | Downloads |
|---|---|
|
Allegro.Extensions.Identifiers.Abstractions
Contains strongly typed identifiers abstractions. |
|
|
Aviendha.Core
Addons, customizations, and extensions for the ABP Framework |
|
|
Aviendha.BillingManagement.Domain.Shared
Addons, customizations, and extensions for the ABP Framework |
|
|
Aviendha.MailingListManagement.Domain.Shared
Addons, customizations, and extensions for the ABP Framework |
|
|
Aviendha.Ddd.Domain
Addons, customizations, and extensions for the ABP Framework |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Meziantou.Framework.StronglyTypedId:
| Repository | Stars |
|---|---|
|
StefH/AnyOf
Use the AnyOf<TFirst, TSecond, ...> type to handle multiple defined types as input parameters or return values for methods.
|
| Version | Downloads | Last Updated |
|---|---|---|
| 2.3.9 | 4,724 | 10/27/2025 |
| 2.3.8 | 179 | 10/27/2025 |
| 2.3.7 | 1,744 | 10/19/2025 |
| 2.3.6 | 1,187 | 10/5/2025 |
| 2.3.5 | 1,188 | 9/21/2025 |
| 2.3.4 | 1,889 | 9/3/2025 |
| 2.3.3 | 15,817 | 3/15/2025 |
| 2.3.2 | 8,758 | 11/17/2024 |
| 2.3.1 | 3,735 | 10/10/2024 |
| 2.3.0 | 8,679 | 7/13/2024 |
| 2.2.0 | 7,126 | 3/21/2024 |
| 2.1.0 | 5,303 | 11/26/2023 |
| 2.0.0 | 615 | 11/19/2023 |
| 1.0.35 | 4,123 | 11/15/2023 |
| 1.0.34 | 4,528 | 9/5/2023 |
| 1.0.33 | 805 | 8/7/2023 |
| 1.0.32 | 6,933 | 3/26/2023 |
| 1.0.31 | 546 | 3/21/2023 |
| 1.0.30 | 382 | 3/20/2023 |
| 1.0.29 | 2,338 | 2/18/2023 |
| 1.0.28 | 8,462 | 1/3/2023 |
| 1.0.27 | 618 | 1/2/2023 |
| 1.0.26 | 436 | 1/2/2023 |
| 1.0.25 | 455 | 1/1/2023 |
| 1.0.24 | 490 | 12/27/2022 |
| 1.0.23 | 431 | 12/26/2022 |
| 1.0.22 | 2,914 | 8/10/2022 |
| 1.0.21 | 2,977 | 4/29/2022 |
| 1.0.20 | 667 | 4/23/2022 |
| 1.0.19 | 6,162 | 2/23/2022 |
| 1.0.18 | 609 | 2/12/2022 |
| 1.0.17 | 918 | 11/10/2021 |
| 1.0.16 | 625 | 11/8/2021 |
| 1.0.15 | 3,793 | 7/14/2021 |
| 1.0.14 | 572 | 6/30/2021 |
| 1.0.13 | 526 | 6/10/2021 |
| 1.0.12 | 1,022 | 5/14/2021 |
| 1.0.11 | 482 | 5/14/2021 |
| 1.0.10 | 573 | 4/25/2021 |
| 1.0.9 | 519 | 4/22/2021 |
| 1.0.8 | 2,116 | 2/17/2021 |
| 1.0.7 | 496 | 2/16/2021 |
| 1.0.6 | 546 | 2/16/2021 |
| 1.0.5 | 526 | 2/15/2021 |
| 1.0.4 | 582 | 2/8/2021 |
| 1.0.3 | 554 | 2/4/2021 |
| 1.0.2 | 500 | 2/4/2021 |
| 1.0.1 | 496 | 2/3/2021 |
| 1.0.0 | 607 | 2/1/2021 |