zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    HDU1879 kruscal 继续畅通工程
    poj1094 拓扑 Sorting It All Out
    (转)搞ACM的你伤不起
    (转)女生应该找一个玩ACM的男生
    poj3259 bellman——ford Wormholes解绝负权问题
    poj2253 最短路 floyd Frogger
    Leetcode 42. Trapping Rain Water
    Leetcode 41. First Missing Positive
    Leetcode 4. Median of Two Sorted Arrays(二分)
    Codeforces:Good Bye 2018(题解)
  • 原文地址:https://www.cnblogs.com/94cool/p/6208072.html
Copyright © 2011-2022 走看看