MessagePack for C#のエラーとその対処法一覧

Unity
neuecc/MessagePack-CSharp
Extremely Fast MessagePack Serializer for C#(.NET, .NET Core, Unity, Xamarin). / msgpack.org - neuecc/MessagePack-CSharp

MessagePack for C#使ってますか?僕は最近unityに導入しました。

MessagePack for C# を Unity iOS で使う時のメモ - Qiita
## これはなに ( を Unity の iOS で使うとき一癖あったのでそのメモです。 ## 環境...

今やみんなIL2CPPなのでコードの事前生成が必要です。上記記事を参考にしましょう。ちなみに僕はruby scriptでmpc.exeを実行するようにしました。

これでJsonUtitlityの代わりにサクッとバイナリファイル使えると思ったらmpc.exeがエラー出しまくりました。ググってもよくわからなかったのでエラー文から推測しました。直りました。

スポンサーリンク

Unity実行時エラー

mpc.exeを実行してコード生成しましょう。そしてResolverまわりの初期化を使う前に呼びましょう。

mpc.exeエラー

Unhandled Error:MessagePack.CodeGenerator.MessagePackGeneratorResolveFailedException: Serialization Object must mark MessagePackObjectAttribute. type: global::GameActor

GameActorクラスに[MessagePackObject]のつけ忘れです

Unhandled Error:MessagePack.CodeGenerator.MessagePackGeneratorResolveFailedException: key is duplicated, all members key must be unique. type: global::GameActor member:_id

GameActorクラスのメンバ変数_idのKeyアトリビュートはすでに使用されてます。継承してると分かりにくい…

Unhandled Error:MessagePack.CodeGenerator.MessagePackGeneratorResolveFailedException: Serialization Type must mark UnionAttribute. type: global::GameCharacter

AbstractやInterfaceであるGameCharacterクラスの場合は[Union(0, typeof(GameActor))]アトリビュートを使うのだ

Unhandled Error:MessagePack.CodeGenerator.MessagePackGeneratorResolveFailedException: all public members must mark KeyAttribute or IgnoreMemberAttribute. type: global::GameActor member:CharaType

GameActorクラスのCharaTypeプロパティに[IgnoreMember]のつけ忘れです

まとめ

ドキュメントさらっと読んで暗記して、エラー文から推測しないとはまります。