C# Protobuf-Net シリアル化

黄舟
黄舟オリジナル
2017-02-13 11:49:072626ブラウズ

ソースコードの場所: protobuf-net

1. Nuget をインストールします:

Tools--Expansion Manager



インストール完了Microsoft Visual Studio 2010 を再起動すると、次の図が表示されます:

ちょっとした注意:

ソリューションがプロジェクトを開いた場合にのみ、次の 2 つの項目が表示されます:


2. protobuf_net をインストールします (Nuget で protobuf-net を見つけてインストールし、プロジェクトを選択すると完了です)



3.パッケージ化 簡単な操作クラス(プロジェクトでは ProtoBuf を使用して導入されており、直接使用できます)

<pre class="csharp">    /// <summary>
    /// Protobuf_net
    /// </summary>
    public class ProtobufSerializer
    {
        /// <summary>
        /// 序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        /// <returns></returns>
        public static string Serialize<T>(T t)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                Serializer.Serialize<T>(ms, t);
                return Encoding.Unicode.GetString(ms.ToArray());
            }
        }
        /// <summary>
        /// 反序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="content"></param>
        /// <returns></returns>
        public static T DeSerialize<T>(string content)
        {
            using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(content)))
            {
                T t = Serializer.Deserialize<T>(ms);
                return t;
            }
        }
    }


UTF8 デシリアライズを使用すると、次のエラーが表示されます

---------------------------

---------------------------
System.IO.EndOfStreamException: 尝试读取超出流末尾的内容。
   在 ProtoBuf.ProtoReader.Ensure(Int32 count, Boolean strict) 位置 c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:行号 257
   在 ProtoBuf.ProtoReader.ReadString() 位置 c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:行号 494
   在 proto_2(Object , ProtoReader )
   在 ProtoBuf.Serializers.CompiledSerializer.ProtoBuf.Serializers.IProtoSerializer.Read(Object value, ProtoReader source) 位置 c:\Dev\protobuf-net\protobuf-net\Serializers\CompiledSerializer.cs:行号 57
   在 ProtoBuf.Meta.RuntimeTypeModel.Deserialize(Int32 key, Object value, ProtoReader source) 位置 c:\Dev\protobuf-net\protobuf-net\Meta\RuntimeTypeModel.cs:行号 775
   在 ProtoBuf.Meta.TypeModel.DeserializeCore(ProtoReader reader, Type type, Object value, Boolean noAutoCreate) 位置 c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:行号 700
   在 ProtoBuf.Meta.TypeModel.Deserialize(Stream source, Object value, Type type, SerializationContext context) 位置 c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:行号 589
   在 ProtoBuf.Meta.TypeModel.Deserialize(Stream source, Object value, Type type) 位置 c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:行号 566
   在 ProtoBuf.Serializer.Deserialize[T](Stream source) 位置 c:\Dev\protobuf-net\protobuf-net\Serializer.cs:行号 77
   在 Serialize.ProtobufSerializer.DeSerialize[T](String content) 位置 E:\WorkSpace\WorkSpaceTest\CompressTest\Serialize\ProtobufSerializer.cs:行号 40
   在 Serialize.Form1.button1_Click(Object sender, EventArgs e) 位置 E:\WorkSpace\WorkSpaceTest\CompressTest\Serialize\Form1.cs:行号 44
---------------------------
确定   
---------------------------

C# の Encoding.Unicode と Encoding.UTF8 の違い

注:

この記事の参照:

Serialization hero・ネット、体験エントリー記録
ASP.NET Web API のパフォーマンスを向上させる 8 つの方法


XML やバイナリ シリアル化メソッドと比較して、Protobuf はより効率的で、より大量のデータをサポートします
サイズシリアル化後の protobuf のサイズは、json の 1/10、xml 形式の 1/20、バイナリ シリアル化 (www.php.cn) の 1/10 です。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。