示例#1
0
        public void Write(object value, ProtoWriter dest)
        {
            if (isRootType)
            {
                Callback(value, TypeModel.CallbackType.BeforeSerialize);
            }
            // write inheritance first
            IProtoSerializer next = GetMoreSpecificSerializer(value);

            if (next != null)
            {
                next.Write(value, dest);
            }

            // write all actual fields
            //Helpers.DebugWriteLine(">> Writing fields for " + forType.FullName);
            for (int i = 0; i < serializers.Length; i++)
            {
                IProtoSerializer ser = serializers[i];
                if (ser.ExpectedType == forType)
                {
                    //Helpers.DebugWriteLine(": " + ser.ToString());
                    ser.Write(value, dest);
                }
            }
            //Helpers.DebugWriteLine("<< Writing fields for " + forType.FullName);
            if (isExtensible)
            {
                ProtoWriter.AppendExtensionData((IExtensible)value, dest);
            }
            if (isRootType)
            {
                Callback(value, TypeModel.CallbackType.AfterSerialize);
            }
        }
示例#2
0
        private static void Write(ActiveCodeReq activeCodeReq, ProtoWriter protoWrite)
        {
            long accountId = activeCodeReq.AccountId;

            if (accountId != 0)
            {
                // Variant可变的
                ProtoWriter.WriteFieldHeader(1, WireType.Variant, protoWrite);
                ProtoWriter.WriteInt64(accountId, protoWrite);
            }

            string activeCode = activeCodeReq.ActiveCode;

            if (!string.IsNullOrEmpty(activeCode))
            {
                ProtoWriter.WriteFieldHeader(2, WireType.String, protoWrite);
                ProtoWriter.WriteString(activeCode, protoWrite);
            }
            ProtoWriter.AppendExtensionData(activeCodeReq, protoWrite);
        }
示例#3
0
        public void Write(object value, ProtoWriter dest)
        {
            var token = ProtoWriter.StartSubItem(value, _prefixLength, dest);

            if (_isRootType)
            {
                Callback(value, TypeModel.CallbackType.BeforeSerialize, dest.Context);
            }
            // write inheritance first
            IProtoSerializerWithWireType next;
            int fn;

            if (GetMoreSpecificSerializer(value, out next, out fn))
            {
                ProtoWriter.WriteFieldHeaderBegin(fn, dest);
                next.Write(value, dest);
            }
            // write all actual fields
            //Helpers.DebugWriteLine(">> Writing fields for " + forType.FullName);
            for (int i = 0; i < _serializers.Length; i++)
            {
                IProtoSerializer ser = _serializers[i];
                if (ser.ExpectedType == ExpectedType)
                {
                    ProtoWriter.WriteFieldHeaderBegin(_fieldNumbers[i], dest);
                    //Helpers.DebugWriteLine(": " + ser.ToString());
                    ser.Write(value, dest);
                }
            }
            //Helpers.DebugWriteLine("<< Writing fields for " + forType.FullName);
            if (_isExtensible)
            {
                ProtoWriter.AppendExtensionData((IExtensible)value, dest);
            }
            if (_isRootType)
            {
                Callback(value, TypeModel.CallbackType.AfterSerialize, dest.Context);
            }
            ProtoWriter.EndSubItem(token, dest);
        }
示例#4
0
 public void Write(object value, ProtoWriter dest)
 {
     if (isRootType)
     {
         Callback(value, TypeModel.CallbackType.BeforeSerialize, dest.Context);
     }
     GetMoreSpecificSerializer(value)?.Write(value, dest);
     for (int i = 0; i < serializers.Length; i++)
     {
         IProtoSerializer protoSerializer = serializers[i];
         if (protoSerializer.ExpectedType == forType)
         {
             protoSerializer.Write(value, dest);
         }
     }
     if (isExtensible)
     {
         ProtoWriter.AppendExtensionData((IExtensible)value, dest);
     }
     if (isRootType)
     {
         Callback(value, TypeModel.CallbackType.AfterSerialize, dest.Context);
     }
 }