C# Protobuf-Net 序列化
2023-09-14 09:02:13 时间
源码位置:protobuf-net
1、安装Nuget :
工具--拓展管理器
安装完成后重启Microsoft Visual Studio 2010,可以看到下图:
小注:
只有该解决方案已经打开项目的时候,才会看到下面两项:
2、安装protobuf_net(在Nuget中找到protobuf-net,安装,选择项目搞定)
3、封装简单操作类(在项目中引入using ProtoBuf;就可以直接用了)
/// 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的区别
小注:
本文参考:
序列化悍将Protobuf-Net,入门动手实录
8 种提升 ASP.NET Web API 性能的方法
protobuf序列化后的大小是json的1/10,xml格式的1/20,是二进制序列化的1/10
作者:jiankunking 出处:http://blog.csdn.net/jiankunking
.NET中JSON的序列化和反序列化的几种方式 原文:.NET中JSON的序列化和反序列化的几种方式 一、什么是JSON JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
.Net 序列化和反序列化SerializerHelper 开始以为SerializerHelper类是项目中已包含的,后来在别的解决方案中测试代码才发现SerializerHelper类是自己写的。 using System; using System.
在平常中,我们经常会用到将一个T类型的东西,序列化成Json然后返回绑定数据到页面这样一个过程。每次面试,大概都被问到怎么序列化的呀?回答总是底层封装好的,算啦,还是做个简单栗子玩玩儿吧,也好堵住面试官的嘴。
相关文章
- C# .NET Framework4.0环境下使用async/await语法,以及其中的需要注意的地方。
- C#.NET常见问题(FAQ)-浮点数如何四舍五入
- C#.NET常见问题(FAQ)-如何将cs文件编译成dll文件 exe文件 如何调用dll文件
- C#.NET常见问题(FAQ)-Visual Studio VS如何显示行号
- asp.net C#检查URL是否有效
- Asp.net(C#) windows 服务{用于实现计划任务,事件监控等}
- C#[Serializable]在C#中的作用-NET 中的对象序列化
- 重新整理数据结构与算法(c#)——算法套马踏棋算法[三十三]
- c# .net缓存(旧)
- C# 直接调用非托管代码的方法
- C# DataTable RowFilter 过滤
- 【原创】开源Math.NET基础数学类库使用(08)C#进行数值积分
- Atitit nlp自然语言处理类库(java python nodejs c#net) 目录 1.1. Python snownlp1 1.2. NLP.js一个nodejs/javascri
- Atitit.跨语言反射api 兼容性提升与增强 java c#。Net php js
- Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结
- C# 可空类型(Nullable)
- 改善C#程序的157个建议——建议33学习笔记:避免在泛型类型中声明静态成员
- C#开发的OpenRA的只读字典IReadOnlyDictionary实现
- (47)C#里使用短路操作符
- .NET(C#):灵活运用CryptoStream,加密不是必须用CryptoStreamMode.Write
- C#实践设计模式原则SOLID
- 重新整理数据结构与算法(c#)—— 图的深度遍历和广度遍历[十一]
- C#中程序错误的种类和程序的调试