4

サーバーがMS.NETで実行され、クライアントがMono(これはUnity3Dエンジンです)で実行されており、BinaryFormatter()を実行しようとすると、次のようにオブジェクトを逆シリアル化します。

   [Serializable]   
    public class Simulator  
    {
        public IDictionary<int, Task> tasks = new Dictionary<int, Task>(); 

クライアント側がタイプを検出/ロードできません:ディクショナリ、リスト... MS.NETで実行されているのと同じ「クライアントコード」が正常に機能します。つまり、逆シリアル化中に例外が発生しません。

http://www.mono-project.com/FAQ:_Technical#Compatibilityから読んだように、これは一般的な問題です。

「独自のクラスをシリアル化する場合は、シリアル化に使用されるアセンブリとクラスを制御できるため、問題はありません。ただし、フレームワークからオブジェクトをシリアル化する場合は、内部構造がこれらのオブジェクトは異なる場合があります。この互換性は、異なるMS.NETバージョンまたはMonoバージョン間でも保証されません。」

ProtoBuf-Netは、このシリアル化/逆シリアル化の問題を回避/解決するのに役立ちますか?

4

1 に答える 1

2

Yes, an external serialization tool such as protobuf-net would solve this - indeed, once you have serialization working between platforms (C++ to java to python to .net), framework versions are less of a concern.

So yes: data serialized in protobuf-net on mono / unity is fully compatible when loaded on .NET. However, it should be noted that BinaryFormatter and protobuf-net are not direct 1:1 equivalents - each has slightly different features and behaviors. For example, protobuf-net doesn't walk events/delegates, and doesn't usually play nicely with things known only as "object". However, key/common scenarios like dictionary and list are fully supported.

于 2012-09-20T05:43:36.907 に答える