c# (ENUM)枚举组合类型的谷歌序列化Protobuf

简介:

c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面:

RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru = true;

[ProtoContract]
class LbsItem
{
[ProtoMember(1)]
public Alarm alarm
{
get; set;
}
}

public enum Alarm : byte
{
无报警,
碰撞 = 1 << 0,
振动 = 1 << 1,
超速 = 1 << 2,
}

public class ProtobufHelper
{
static ProtobufHelper()
{
RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru = true;
}
/// <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 Convert.ToBase64String(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(Convert.FromBase64String(content)))
{
T t = Serializer.Deserialize<T>(ms);
return t;
}
}
}

示例:

Alarm alarm = Alarm.振动 | Alarm.碰撞;

LbsItem item = new Demo.LbsItem();
item.alarm = alarm;

var serValue= ProtobufHelper.Serialize<LbsItem>(item);
var _item = ProtobufHelper.DeSerialize<LbsItem>(serValue);




本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/p/6208072.html,如需转载请自行联系原作者

相关文章
|
28天前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
33 4
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
35 3
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
55 1
|
1月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
16 0
|
2月前
|
C#
C# 可空类型(Nullable)
C# 单问号 ? 与 双问号 ??
52 12
|
2月前
|
C#
C# 枚举(Enum)
枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。
45 9
|
3月前
|
JSON 缓存 NoSQL
redis序列化数据时,如何包含clsss类型信息?
通过配置 `com.fasterxml.jackson.databind.ObjectMapper` 的 `enableDefaultTyping` 方法,可以使序列化后的 JSON 包含类信息。
56 2
|
4月前
|
存储 C# 数据库
解决C#对Firebase数据序列化失败的难题
在游戏开发中,Unity结合Firebase实时数据库为开发者提供强大支持,但在C#中进行数据序列化和反序列化时常遇难题。文章剖析了数据丢失或反序列化失败的原因,并给出解决方案,包括使用`JsonUtility`、确保字段标记为`[Serializable]`以及正确配置网络请求。示例代码演示了如何在Unity环境中实现Firebase数据的序列化和反序列化,并通过设置代理IP、Cookies和User-Agent来增强网络请求的安全性。这些技巧有助于确保数据完整传输,提升开发效率。
解决C#对Firebase数据序列化失败的难题
|
4月前
|
程序员 C#
C# 语言类型全解
C# 语言类型全解
27 0
|
4月前
|
开发框架 .NET 编译器
C# 中的记录(record)类型和类(class)类型对比总结
C# 中的记录(record)类型和类(class)类型对比总结