Lagrange.Proto
1.0.8
dotnet add package Lagrange.Proto --version 1.0.8
NuGet\Install-Package Lagrange.Proto -Version 1.0.8
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="Lagrange.Proto" Version="1.0.8" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Lagrange.Proto" Version="1.0.8" />
<PackageReference Include="Lagrange.Proto" />
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 Lagrange.Proto --version 1.0.8
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Lagrange.Proto, 1.0.8"
#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 Lagrange.Proto@1.0.8
#: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=Lagrange.Proto&version=1.0.8
#tool nuget:?package=Lagrange.Proto&version=1.0.8
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
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
ProtoValueMember
attribute.
[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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Lagrange.Proto:
Package | Downloads |
---|---|
Lagrange.Core
Package Description |
|
AilimitSaveResolver.Save
A library and tool that parses the game AlLimit's saves to find items not found in the saves. |
GitHub repositories
This package is not used by any popular GitHub repositories.