ProtobufSerializer类(NetworkComms 2.3.1源码了解和学习)
networkComms.net2.3.1开源版本,基于gpl V3协议。因为不能公开3.x版本的源码,所以基于此版本进行学习。3.X版本进行了诸多改进和Bug修复,使用方法上两者相差不大。 /*请注意使用以下代码,需遵循GplV3协议*/ using System; using System.Collections.Generic; using System.Text; using ProtoBuf; using System.IO; using System.Runtime.InteropServices; using ProtoBuf.Meta; #if ANDROID using PreserveAttribute = Android.Runtime.PreserveAttribute; #elif iOS using PreserveAttribute = MonoTouch.Foundation.PreserveAttribute; #endif namespace DPSBase { ///ProtoBufSerializer ProtoBuf序列化器 /// </summary> [DataSerializerProcessor(1)] public class ProtobufSerializer : DataSerializer { private static int metaDataTimeoutMS = 150000; #if ANDROID || iOS [Preserve] #endif private ProtobufSerializer() { } #region Depreciated static DataSerializer instance; [Obsolete("Instance access via class obsolete, use DPSManager.GetDataSerializer<T>")] public static DataSerializer Instance { get { if (instance == null) { instance = GetInstance<ProtobufSerializer>(); //Increase timeout to prevent errors when CPU busy RuntimeTypeModel.Default.MetadataTimeoutMilliseconds = metaDataTimeoutMS; } return instance; } } #endregion #region ISerialize Members /// <inheritdoc /> /// 把对象序列化为数据流 protected override void SerialiseDataObjectInt(Stream ouputStream, object objectToSerialise, Dictionary<string, string> options) { ProtoBuf.Serializer.NonGeneric.Serialize(ouputStream, objectToSerialise); ouputStream.Seek(0, 0); } /// <inheritdoc /> /// 把数据流序列化为对象 protected override object DeserialiseDataObjectInt(Stream inputStream, Type resultType, Dictionary<string, string> options) { return ProtoBuf.Serializer.NonGeneric.Deserialize(resultType, inputStream); } #endregion } } http://www.cnblogs.com/networkcomms http://www.networkcoms.cn 编辑
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。