Heim  >  Artikel  >  Backend-Entwicklung  >  C# Protobuf-Net-Serialisierung

C# Protobuf-Net-Serialisierung

黄舟
黄舟Original
2017-02-13 11:49:072529Durchsuche

Quellcode-Speicherort: protobuf-net

1. Installieren Sie Nuget :

Tools – Erweiterungsmanager



Nach Abschluss der Installation starten Sie Microsoft Visual Studio 2010 neu. Sie sehen das folgende Bild:

Kleiner Hinweis:

Erst wenn die Lösung das Projekt geöffnet hat, sehen Sie die folgenden zwei Elemente:


2. Installieren Sie protobuf_net (suchen Sie protobuf-net in Nuget, installieren Sie es und wählen Sie das Projekt aus, das abgeschlossen werden soll)



3. Kapseln Sie einfache Operationsklassen (führen Sie ProtoBuf in das Projekt ein; Sie können verwenden). es direkt)

<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;
            }
        }
    }

Bei Verwendung der UTF8-Deserialisierung tritt der folgende Fehler auf:

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

---------------------------
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
---------------------------
确定   
---------------------------

Der Unterschied zwischen Encoding.Unicode und Encoding.UTF8 in C#

Kleiner Hinweis:

Referenz für diesen Artikel:

Protobuf-Net, der Meister der Serialisierung, praktische Erfahrung
8 Möglichkeiten zur Verbesserung der Leistung der ASP.NET-Web-API


Im Vergleich zu XML und binären Serialisierungsmethoden ist Protobuf effizienter und unterstützt größere Datenmengen
Die Größe der Protobuf-Serialisierung beträgt 1/10 von JSON, 1/20 von XML-Format und 1/10 von Binärserialisierung


Das Obige ist der Inhalt der C#-Protobuf-Net-Serialisierung. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn