c#的序列化有多种,我通常喜欢用第三方组件,一个公共组件要拿出来用,并且支持不少语言,甚至以此谋生,确定有其优点。java
有或者说存在必然有其合理性,通过几年开发,我更加喜欢第三方的东西,相似序列化的东西。json
开篇老是牢骚,你们要习惯哈c#
最近在写一个小组件,组合一个框架,先分别介绍里面用到的东西,刚好一个个说说。框架
本篇就叫序列化篇吧,没有什么多说的,直接代码上了。less
已经测试了,没有什么多说的。测试
里面有个init方法,由于个人类是静态的,因此每一个都调用一次初始化。对象
/// 序列化二进制
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] Serializer<T>(T obj)
{
Init();
return MessagePackSerializer.Serialize<T>(obj);
}开发
/// <summary>
/// 反序列化二进制
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="bytes"></param>
/// <returns></returns>
public static T Deserialize<T>(byte[] bytes)
{
Init();
return MessagePackSerializer.Deserialize<T>(bytes);
}字符串
/// <summary>
/// byte[]转json字符串
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static string JSONBytesToString(byte[]json)
{
Init();
return MessagePackSerializer.ToJson(json);
}
/// <summary>
/// json字符串转byte[]
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static byte[] JSONStringToBytes(string json)
{
Init();
return MessagePackSerializer.FromJson(json);
}string
/// <summary>
/// 对象转json字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string JSONObjectToString<T>(T obj)
{
return MessagePackSerializer.ToJson<T>(obj);
}
/// <summary>
/// 对象直接转json的byte[]
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] JSONObjectToBytes<T>(T obj )
{
Init();
return JSONStringToBytes(JSONObjectToString<T>(obj));
}
/// <summary>
/// json字符串转对象,序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static T JSONStringToObject<T>(string json)
{
Init();
return Deserialize<T>(JSONStringToBytes(json));
}
后说:
MessagePack中也有JSON,因此一并用了,谁叫fastjson只有java版本呢。
MessagePack有2种使用方式,一直是特性,须要在序列化的类上添加MessagePackObject,这叫作限制类扩展使用
例如:
[MessagePackObject]
public Class Person
{
}
另一种就是非限制的,就是我使用的方式,封装一个方法,不使用特性,可是这种就须要初始化了,采用默认的实例。
也就有了个人初始化方法Init.就像下面这样。
private static volatile bool isInit=true;
private static void Init()
{
if (isInit)
{
MessagePackSerializer.SetDefaultResolver(MessagePack.Resolvers.ContractlessStandardResolver.Instance);
isInit = false;
}
}
MessagePack支持.Net 各种型平台,.Net Core,.Net FramWork,.Net Standard.
最最后说一下,mongdb有个东西叫BSON,这也是一种格式,也能够做为通讯格式序列化。
mongdb的BSON格式也支持.Net各种型平台了。
整体来讲,c#的序列化有XML,二进制,JSON,BSON