RSCG – GenPack
| name | GenPack |
| nuget | https://www.nuget.org/packages/GenPack/ |
| link | https://github.com/dimohy/GenPack |
| author | dimohy |
Generating Binary Serialization and properties for class
This is how you can use GenPack .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GenPack" Version=" 0.9.0-preview1" OutputItemType="Analyzer" ReferenceOutputAssembly="true" />
</ItemGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
</Project>
The code that you will use is
using SerializerDemo;
var p= new Person() { Name= "Andrei Ignat" };
var bytes= p.ToPacket();
var entity = Person.FromPacket(bytes);
Console.WriteLine("name is "+entity.Name);
using GenPack;
namespace SerializerDemo;
[GenPackable]
public partial record Person
{
public readonly static PacketSchema Schema = PacketSchemaBuilder.Create()
.@short("Id","Age description")
.@string("Name","Name description")
.Build();
}
The code that is generated is
#pragma warning disable CS0219
namespace SerializerDemo
{
public partial record Person : GenPack.IGenPackable
{
/// <summary>
/// Age description
/// </summary>
public short Id { get; set; }
/// <summary>
/// Name description
/// </summary>
public string Name { get; set; } = string.Empty;
public byte[] ToPacket()
{
using var ms = new System.IO.MemoryStream();
ToPacket(ms);
return ms.ToArray();
}
public void ToPacket(System.IO.Stream stream)
{
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(Id);
writer.Write(Name);
}
public static SerializerDemo.Person FromPacket(byte[] data)
{
using var ms = new System.IO.MemoryStream(data);
return FromPacket(ms);
}
public static SerializerDemo.Person FromPacket(System.IO.Stream stream)
{
SerializerDemo.Person result = new SerializerDemo.Person();
System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);
int size = 0;
byte[] buffer = null;
result.Id = reader.ReadInt16();
result.Name = reader.ReadString();
return result;
}
}
}
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/GenPack
Leave a Reply