--- lang: ja-jp breaks: true --- # MessagePack を使用する `MessagePack-CSharp` C# 2021-09-14 > neuecc/MessagePack-CSharp > https://github.com/neuecc/MessagePack-CSharp ## NuGet パッケージ のインストール ```shell= Install-Package MessagePack Install-Package MessagePackAnalyzer ``` :::info Diagnostic Analyzers オプションの C#アナライザーパッケージをインストールして、コーディングミスに関する警告と自動修正候補を表示して時間を節約します。 ::: #### 拡張 機能 ```shell= Install-Package MessagePack.ReactiveProperty Install-Package MessagePack.UnityShims Install-Package MessagePack.AspNetCoreMvcFormatter ``` 非常にパフォーマンスの高いフォーマッタを提供する実験的な機能 ```shell= Install-Package MessagePack.Experimental ``` ## C#クラスオブジェクトのシリアライズ > https://github.com/neuecc/MessagePack-CSharp#object-serialization クラスに `[MessagePackObject(keyAsPropertyName: true)]` 属性を付与すると、プロパティ名をキーとしたシリアライズとなる。 ```csharp= [MessagePackObject(keyAsPropertyName: true)] public class Sample3 { // No need for a Key attribute public int Foo { get; set; } // If want to ignore a public member, you can use the IgnoreMember attribute [IgnoreMember] public int Bar { get; set; } } ``` ```csharp= MessagePackSerializerOptions option = StandardResolverAllowPrivate.Options .WithCompression(MessagePackCompression.Lz4Block); //var bin2 = MessagePackSerializer.Deserialize<RequestsEx>(objReq, TypelessContractlessStandardResolver.Instance); var obj_ser = MessagePackSerializer.Serialize<object>(reqEx, option); var obj_des = MessagePackSerializer.Deserialize<object>(obj_ser, option); obj_ser = MessagePackSerializer.Serialize<object>(obj_des); obj_des = MessagePackSerializer.Deserialize<RequestsEx>(obj_ser, option); ``` ## MessagePackシリアライザーオプションの種類 :::info `MessagePack.Resolvers.StandardResolver.cs`より。 https://github.com/neuecc/MessagePack-CSharp/blob/master/src/MessagePack.UnityClient/Assets/Scripts/MessagePack/Resolvers/StandardResolver.cs ::: * `StandardResolver` * `ContractlessStandardResolver` * `StandardResolverAllowPrivate` * `ContractlessStandardResolverAllowPrivate` :::info `ContractlessStandardResolverAllowPrivate`を使用することで、クラスオブジェクトへの`[MessagePackObject(keyAsPropertyName: true)]`属性の記述が不要になる。 ::: ###### tags: `MessagePack` `gRPC` `ASP.NET Core` `MessagePack-CSharp` `C#`