Skip to main content

serde by Andy Gocke

NuGet / site data

Nuget GitHub last commit GitHub Repo stars

Details

Info

info

Name: serde

Package Description

Author: Andy Gocke

NuGet: https://www.nuget.org/packages/serde/

You can find more details at https://github.com/serdedotnet/serde

Source: https://github.com/serdedotnet/serde

Author

note

Andy Gocke Alt text

Original Readme

note

Serde.NET

Serde.NET is a port of the popular serde.rs Rust serialization/deserialization library to .NET.

For an overview, see Overview.

Start by adding the serde NuGet package:

dotnet add package serde

To generate serialization/deserialization info for a type, now do the following:

  1. Mark the type partial
  2. Add the [GenerateSerde] attribute
using Serde;
using Serde.Json;

string output = JsonSerializer.Serialize(new SampleClass());

// prints: {"X":3,"Y":"sample"}
Console.WriteLine(output);

var deserialized = JsonSerializer.Deserialize<SampleClass>(output);

// prints SampleClass \{ X = 3, Y = sample }
Console.WriteLine(deserialized);

[GenerateSerde]
partial record SampleClass
{
// automatically includes public properties and fields
public int X \{ get; init; \} = 3;
public string Y = "sample";
}

About

note

Serializing in SERDE format

How to use

Example (source csproj, source files)

This is the CSharp Project that references serde

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Serde" Version="0.17.1" />
</ItemGroup>

</Project>

Generated Files

Those are taken from $(BaseIntermediateOutputPath)\GX


#nullable enable

using System;
using Serde;

namespace SerializerDemo;

partial class Person
{
sealed partial class _SerdeObj : global::Serde.ISerde<SerializerDemo.Person>
{
global::Serde.ISerdeInfo global::Serde.ISerdeInfoProvider.SerdeInfo => SerializerDemo.Person.s_serdeInfo;

void global::Serde.ISerialize<SerializerDemo.Person>.Serialize(SerializerDemo.Person value, global::Serde.ISerializer serializer)
{
var _l_info = global::Serde.SerdeInfoProvider.GetInfo(this);
var _l_type = serializer.WriteType(_l_info, 2);
_l_type.WriteI32(_l_info, 0, value.Age);
_l_type.WriteString(_l_info, 1, value.Name);
_l_type.End(_l_info);
}
SerializerDemo.Person Serde.IDeserialize<SerializerDemo.Person>.Deserialize(IDeserializer deserializer)
{
int _l_age = default!;
string _l_name = string.Empty;

byte _r_assignedValid = 0;

var _l_serdeInfo = global::Serde.SerdeInfoProvider.GetInfo(this);
var typeDeserialize = deserializer.ReadType(_l_serdeInfo);
while (true)
{
var (_l_index_, _) = typeDeserialize.TryReadIndexWithName(_l_serdeInfo);
if (_l_index_ == Serde.ITypeDeserializer.EndOfType)
{
break;
}

switch (_l_index_)
{
case 0:
Serde.DeserializeException.ThrowIfDuplicate(_r_assignedValid, 0, _l_serdeInfo);
_l_age = typeDeserialize.ReadI32(_l_serdeInfo, _l_index_);
_r_assignedValid |= ((byte)1) << 0;
break;
case 1:
Serde.DeserializeException.ThrowIfDuplicate(_r_assignedValid, 1, _l_serdeInfo);
_l_name = typeDeserialize.ReadString(_l_serdeInfo, _l_index_);
_r_assignedValid |= ((byte)1) << 1;
break;
case Serde.ITypeDeserializer.IndexNotFound:
typeDeserialize.SkipValue(_l_serdeInfo, _l_index_);
break;
default:
throw new InvalidOperationException("Unexpected index: " + _l_index_);
}
}
typeDeserialize.End(_l_serdeInfo);
if ((_r_assignedValid & 0b1) != 0b1)
{
throw Serde.DeserializeException.UnassignedMember();
}
var newType = new SerializerDemo.Person() {
Age = _l_age,
Name = _l_name,
};

return newType;
}
}
}

Useful

Download Example (.NET C#)

Share serde

https://ignatandrei.github.io/RSCG_Examples/v2/docs/serde

Category "Serializer" has the following generators:

1 Csvcsharp Nuget GitHub Repo stars 2025-10-05

2 GenPack Nuget GitHub Repo stars 2024-11-06

3 jsonConverterSourceGenerator Nuget GitHub Repo stars 2023-10-30

4 JsonPolymorphicGenerator Nuget GitHub Repo stars 2023-10-06

5 Nino Nuget GitHub Repo stars 2025-08-06

6 ProtobufSourceGenerator Nuget GitHub Repo stars 2023-09-24

7 Schema Nuget GitHub Repo stars 2025-08-13

8 serde Nuget GitHub Repo stars 2026-08-20

9 StackXML Nuget GitHub Repo stars 2025-08-01

10 System.Text.Json Nuget GitHub Repo stars 2023-04-16

11 VYaml Nuget GitHub Repo stars 2025-10-03

See category

Serializer