Lagrange.Proto
1.0.2
See the version list below for details.
dotnet add package Lagrange.Proto --version 1.0.2
NuGet\Install-Package Lagrange.Proto -Version 1.0.2
<PackageReference Include="Lagrange.Proto" Version="1.0.2" />
<PackageVersion Include="Lagrange.Proto" Version="1.0.2" />
<PackageReference Include="Lagrange.Proto" />
paket add Lagrange.Proto --version 1.0.2
#r "nuget: Lagrange.Proto, 1.0.2"
#:package Lagrange.Proto@1.0.2
#addin nuget:?package=Lagrange.Proto&version=1.0.2
#tool nuget:?package=Lagrange.Proto&version=1.0.2
Lagrange.Proto
The Blazing-fast Code-first C# Google Protocol Buffer Serializer
Overview
- Low memory allocation
- AOT Friendly using Roslyn's Source Generators
- Extreme-fast Serialization
- x86-64 SIMD Support for the VarInt Encoding
- Supported C# Type
- string, byte[], ReadOnlyMemory<byte> (Length-Delimited)
- bool, sbyte, byte, short, ushort, int, uint, long, ulong (VarInt)
- float, double (Fixed32, Fixed64)
- ProtoPackable (nested object for Length-Delimited)
- List<T>, T[] (repeated field)
- Dictionary<TKey, TValue> (map field)
- Nullable<T> (optional field)
- Enum with valid underlying type (VarInt)
Usage - Reflection-based
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Lagrange.Proto;
public class Person
{
[ProtoMember(1)] public string Name { get; set; }
[ProtoMember(2)] public int Age { get; set; }
[ProtoMember(3)] public List<string> Hobbies { get; set; }
}
After defining the class, you can serialize and deserialize it using the ProtoSerializer class.
var result = ProtoSerializer.Serialize(new Person
{
Name = "John Doe",
Age = 30,
Hobbies = new List<string> { "Reading", "Traveling" }
});
Console.WriteLine($"Serialized: {BitConverter.ToString(resutl)}");
var person = ProtoSerializer.Deserialize<Person>(result.AsSpan());
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
Console.WriteLine($"Hobbies: {string.Join(", ", person.Hobbies)}");
Usage - Source Generator-based
For AOT-friendly code generation, you can use the ProtoPackable attribute to mark your classes. The source generator will generate the necessary serialization and type info methods at compile time.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Lagrange.Proto;
[ProtoPackable]
public class Person
{
[ProtoMember(1)] public string Name { get; set; }
[ProtoMember(2)] public int Age { get; set; }
[ProtoMember(3)] public List<string> Hobbies { get; set; }
}
var result = ProtoSerializer.SerializeProtoPackable(new Person
{
Name = "John Doe",
Age = 30,
Hobbies = new List<string> { "Reading", "Traveling" }
});
Console.WriteLine($"Serialized: {BitConverter.ToString(resutl)}");
var person = ProtoSerializer.DeserializeProtoPackable<Person>(result.AsSpan());
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
Console.WriteLine($"Hobbies: {string.Join(", ", person.Hobbies)}");
Remarks
- To add Properties for the Value of the Map Field, use the
ProtoValueMemberattribute.
[ProtoMember(1)] [ProtoValueMember(NumberHandling = NumberHandling.Signed)]
public Dictionary<string, int> MapField { get; set; } = new();
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. 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 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. |
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages (4)
Showing the top 4 NuGet packages that depend on Lagrange.Proto:
| Package | Downloads |
|---|---|
|
Lagrange.Core
Package Description |
|
|
Mikibot.Crawler
Package Description |
|
|
AilimitSaveResolver.Save
A library and tool that parses the game AlLimit's saves to find items not found in the saves. |
|
|
Lagrange.Proto.Formatter
Lagrange Proto Formatter with Source Generator |
GitHub repositories
This package is not used by any popular GitHub repositories.