2019-8-31-dotnet-使用-MessagePack-序列化对象
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
dotnet 使用 MessagePack 序列化对象
|
lindexi
|
2019-08-31 16:55:58 +0800
|
2019-03-15 08:19:44 +0800
|
dotnet
|
和很多序列化库一样,可以通过 MessagePack 序列化和反序列化,和 json 相比这个库提供了二进制的序列化,序列化之后的内容长度比 json 小很多
这个库能序列的内容不多,大多数时候建议使用的序列的类都是只有基础的 int 和 bool 字符串等,最好不要存在复杂的类
使用 MessagePack 的好处只是序列化出来的内容的长度小,但是从性能等方面,其实和 Json 差别不大,在序列化简单的类的时候,可以看到 MessagePack 的序列化速度会比较快。在序列化比较大的类如果序列化到文件,那么因为文件读写的性能,可以看到 MessagePack 的性能明显比 json 好。
在使用 MessagePack 之前需要通过 Nuget 安装
安装方法是在 Nuget 输入 MessagePack 安装
下面写一个简单的方法,将会对这个类序列化
[MessagePackObject]
public class Foo
{
[Key(0)]
public string Lindexi { set; get; }
}
现在主函数创建这个类
var foo = new Foo { Lindexi = "林德熙是逗比" };
通过 MessagePackSerializer.Serialize 方法可以将一个类序列化为 byte 数组,或序列化到 stream 也就是可以直接序列化到文件
var byteList = MessagePackSerializer.Serialize(foo);
如果想要看 byteList 的内容,可以使用下面方法将 byte 数组转字符串
Console.WriteLine(ByteListToString(byteList));
private static string ByteListToString(byte[] byteList)
{
return string.Concat(byteList.Select(temp => temp.ToString("x2")));
}
使用下面代码可以反序列化
foo = MessagePackSerializer.Deserialize<Foo>(byteList);
Console.WriteLine(foo.Lindexi);
我尝试运行代码,可以看到下面代码
91b2e69e97e5beb7e78699e698afe98097e6af94
林德熙是逗比
前面是将 Foo 序列化的二进制
如果在使用的时候发现下面代码,那么很多时候都是因为没有在类上面添加特性,需要修改类为公开的,然后在类上面添加 MessagePackObject 特性,然后在每个公开属性上面添加 Key 特性,同时输入这个属性是在哪个顺序
MessagePack.FormatterNotRegisteredException:“KouhoofamerNeejirstistedrea.Foo is not registered in this resolver. resolver:StandardResolver”
github:msgpack/msgpack-cli
2019-8-31-dotnet-使用-MessagePack-序列化对象的更多相关文章
- dotnet 使用 MessagePack 序列化对象
和很多序列化库一样,可以通过 MessagePack 序列化和反序列化,和 json 相比这个库提供了二进制的序列化,序列化之后的内容长度比 json 小很多 这个库能序列的内容不多,大多数时候建议使 ...
- .NET Core 序列化对象输出字节数大小比较
写代码验证了一下 .NET Core 中序列化对象输出字节数大小,.NET Core 版本是 3.0.100-preview8-013656 ,对象属性使用了 Guid 与 DateTime 类型,胜 ...
- (六)分布式通信----MessagePack序列化
1. .Net Core的序列化方式 1.1 json.Net 常用的工具包,如Newtonsoft.Json, 它是基于json格式的序列化和反序列化的组件 json.net 有以下优点: 侵入性: ...
- DotNet的JSON序列化与反序列化
JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...
- Android使用HttpURLConnection通过POST方式发送java序列化对象
使用HttpURLConnection类不仅可以向WebService发送字符串,还可以发送序列化的java对象,实现Android手机和服务器之间的数据交互. Android端代码: public ...
- 序列化对象为xml字符串
/// <summary> /// 序列化对象为xml字符串 /// </summary> /// <param name="obj" ...
- Serializable序列化对象
Serializable序列化对象发送: Intent intent = new Intent(); intent.setClass(mContext, HomeDetailReportActivit ...
- C# 使用XML序列化对象(二)
在C# 使用XML序列化对象(一)中描述了使用XML序列化对象的最简单的实现. 现在我们来看看稍微复杂一点的情况: 现有两个类:A和B,B是A的派生类,如下所示: public class A { p ...
- Android 使用Parcelable序列化对象
转:http://ipjmc.iteye.com/blog/1314145 Android序列化对象主要有两种方法,实现Serializable接口.或者实现Parcelable接口.实现 ...
- Android中序列化对象到XMl 和 XML反序列化为对象
package com.example.xmloperation; import java.io.File; import java.io.FileOutputStream; import java. ...
随机推荐
- C++/CLI 创建WPF程序
本文简单演示下用C++/CLI创建WPF程序,IDE为VS2015 首先创建CLR项目,选择CLR空项目: 然后,右键源文件,选择新建class,选择CLR->Component Class 接 ...
- fastjson 对象和json互转
list转json List<Openid> openids = od.getAll(session); String json = JSONObject.toJSONString(ope ...
- 关于springmvc 只能在index.jsp页面显示图片的处理办法jsp页面无法显示图片
首先,已经配置好了mvc对静态资源的处理 只有index,jsp可以显示图片 其他页面同样的代码则不显示 后来折腾了半天,发现 index是static的父目录的级别文件 可以向下访问 但是其他的js ...
- find()和find_all()的具体使用
在我们学会了BeautifulSoup库的用法后,我们就可以使用这个库对HTML进行解析,从网页中提取我们需要的内容. 在BeautifulSoup 文档里,find().find_all()两者的定 ...
- 怎么让一个不定宽高的div垂直水平居中?
方法一:使用CSS3 transform 父盒子设置:position:relative; div设置:position:absolute;transform:translate(-50%,-50%) ...
- 对于MD5加密处理方式
来源:http://blog.51cto.com/xqtesting/1924977 但有时候我们请求的参数可能需要加密,比如登录接口中的密码可能需要经过md5加密这时候怎么处理呢? 这种方法比较简单 ...
- JDBC vs Hibernate(转)
jdbc和Hibernate区别 刚开始学习JAVA时,认为Hibernate是一个很神圣的东西,好像是会了SSH,就能走遍全世界一样.记得曾经在枫叶面试的时候,我们几个同学出还说这个公司怎么这么的落 ...
- javascript里的eval总结
JavaScript eval() 函数 1.定义和用法 eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行. 如果参数是一个表达式,eval() 函数将执行表达式.如果参 ...
- 【水滴石穿】rnTest
其实就是一个小的demo,不过代码分的挺精巧的 先放地址:https://github.com/linchengzzz/rnTest 来看看效果 确实没有什么可以说的,不过代码部分还行 先入口文件 / ...
- Xdebug步骤
谷歌浏览器安装xdebug cd /etc/php/7.2/fpm/conf.d 重启sudo service php7.1-fpm restart (注意 php版本) 重启编辑器