BenMakesGames.JsonDerivesAttribute
0.1.0
Prefix Reserved
dotnet add package BenMakesGames.JsonDerivesAttribute --version 0.1.0
NuGet\Install-Package BenMakesGames.JsonDerivesAttribute -Version 0.1.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="BenMakesGames.JsonDerivesAttribute" Version="0.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="BenMakesGames.JsonDerivesAttribute" Version="0.1.0" />
<PackageReference Include="BenMakesGames.JsonDerivesAttribute" />
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 BenMakesGames.JsonDerivesAttribute --version 0.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: BenMakesGames.JsonDerivesAttribute, 0.1.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 BenMakesGames.JsonDerivesAttribute@0.1.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=BenMakesGames.JsonDerivesAttribute&version=0.1.0
#tool nuget:?package=BenMakesGames.JsonDerivesAttribute&version=0.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
What is it?
An alternative API for marking derived classes for JSON serialization and deserialization.
Why?
The default API for registering derived types looks like this:
[JsonDerivedType(typeof(SomeDerivedClass), typeDiscriminator: "some")]
[JsonDerivedType(typeof(SomeOtherDerivedClass), typeDiscriminator: "someOther")]
public interface ISomeInterface
{
// ...
}
This has some problems:
- If you don't own the class, you can't add new derived types.
- The list of derived types might become quite long.
JsonDerivedTypeAttributepredates generic attribute support, requiring a touch more boilerplate.- Depending on your use case, you'd probably be happy with a reasonable default for
typeDiscriminatorrather than having to manually specify it for each class. - You might prefer to see all the configuration about a derived class on that class, rather than having to check all implemented interfaces to find such configuration.
API provided by this package
// nothing to do here!
public interface ISomeInterface
{
// ...
}
[JsonDerives<ISomeInterface>]
public class SomeDerivedClass : ISomeInterface
{
// ...
}
[JsonDerives<ISomeInterface>("optionalTypeDiscriminator")]
public class SomeOtherDerivedClass : ISomeInterface
{
// ...
}
Example usage, assuming classes above
public class CollectionOfObjects
{
public List<ISomeInterface> Objects { get; set; }
}
var collection = new CollectionOfObjects()
{
Objects = [
new SomeDerivedClass(),
new SomeOtherDerivedClass()
]
};
var options = new JsonSerializerOptions();
options.ConfigurePolymorphicTypes(
discriminatorPropertyName: "$type", // defaults to "$type", so this could be left out in this example
assemblies: [
Assembly.GetAssembly(typeof(CollectionOfObjects))!
]
);
var json = JsonSerializer.Serialize(collection, options);
var deserialized = JsonSerializer.Deserialize<CollectionOfObjects>(json, options);
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net9.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.1.0 | 218 | 8/17/2025 |