Maison >développement back-end >Tutoriel C#.Net >Sérialisation C# Protobuf-Net
Emplacement du code source : protobuf-net
1. Installer Nuget :
Outils - Gestionnaire d'extension
Une fois l'installation terminée, redémarrez Microsoft Visual Studio 2010, vous pouvez voir l'image suivante :
Petite note :
Uniquement lorsque la solution aura ouvert le projet, vous verrez les deux éléments suivants :
2. Installez protobuf_net (trouvez protobuf-net dans Nuget, installez, sélectionnez le projet à terminer)
3. Encapsuler des classes d'opérations simples (introduire l'utilisation de ProtoBuf dans le projet ; vous pouvez utiliser directement)
<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; } } }
Lors de l'utilisation de la désérialisation UTF8, l'erreur suivante apparaîtra :
--------------------------- --------------------------- 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 --------------------------- 确定 ---------------------------
La différence entre Encoding.Unicode et Encoding.UTF8 en C#
Petite note :
Référence pour cet article :
Protobuf-Net, le maître de la sérialisation, expérience pratique
8 façons d'améliorer les performances de l'API Web ASP.NET
Par rapport aux méthodes de sérialisation XML et binaire, Protobuf est plus efficace et prend en charge de plus grandes quantités de données
La taille de la sérialisation protobuf est de 1/10 de json, 1/20 du format XML et 1/10 de la sérialisation binaire
Ce qui précède est le contenu de la sérialisation C# Protobuf-Net. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !