摘要:通过类库提供的和分别执行序列化和反序列化,而不用依赖任何生成的代码。只针对平台的话,不需要文件就可以应用序列化协议。
前一篇文章我们看到使用Google.Protobuf有诸多不便(参考《如何在C#中使用Google.Protobuf工具》),这次我们来看看另一个工具的使用体验。
在类级别增加注解[ProtoContract],在字段级别增加注解[ProtoMember(orderxxx)]
[ProtoContract] public class ErrorLog { [ProtoMember(1)] public string LogID { get; set; } [ProtoMember(2)] public string Context { get; set; } [ProtoMember(3)] public string Stack { get; set; } }
当安装了protobuf-net.BuildTools工具后,还可以在开发时对目标类型(添加了[ProtoContract]注解)的定义进行检查,比如字段顺序重复、使用的字段类型不符合protobuf要求等。比如因疏忽设置了重复的字段顺序,提示效果如下:
public static byte[] Serialize(ErrorLog log) { using (MemoryStream memoryStream = new MemoryStream()) { ProtoBuf.Serializer.Serialize(memoryStream, log); return memoryStream.ToArray(); } }
public static ErrorLog DeSerialize(byte[] data) { using (MemoryStream ms = new MemoryStream(data)) { return ProtoBuf.Serializer.Deserialize(ms); } }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/125111.html
摘要:在反序列化字符串为对象时,抛出如下异常。即在文档中有一个错误缺少根元素。首先看下代码抛出异常是在这里出现的。问题在于这里,原因是进行了写入操作,最后流的位置停留在尾部。因此,在反序列化之前将流的位置定位到开始的位置即可。 Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常。showImg(https://segmentfault.com/img/bVHTdx?w=576&...
摘要:系列公用委托都用于委托带有返回值的的方法,所有都是最后一个参数代表返回值类型。的字面对象据称也是哈希实现。 Java 丢了好多年,最近在拣起来,首先当然是了解这么多年来它的变化,于是发现了 Java 8 的java.util.stream。在学习和试验的过程中,相比较于 C# 和 javascript,有那么些心得,作文以记之。 早些时间写过一篇《ES6 的 for..of 和 Ge...
摘要:系列公用委托都用于委托带有返回值的的方法,所有都是最后一个参数代表返回值类型。的字面对象据称也是哈希实现。 Java 丢了好多年,最近在拣起来,首先当然是了解这么多年来它的变化,于是发现了 Java 8 的java.util.stream。在学习和试验的过程中,相比较于 C# 和 javascript,有那么些心得,作文以记之。 早些时间写过一篇《ES6 的 for..of 和 Ge...
阅读 3735·2023-01-11 11:02
阅读 4244·2023-01-11 11:02
阅读 3050·2023-01-11 11:02
阅读 5180·2023-01-11 11:02
阅读 4737·2023-01-11 11:02
阅读 5534·2023-01-11 11:02
阅读 5313·2023-01-11 11:02
阅读 3986·2023-01-11 11:02