コード例 #1
0
        /// <summary>
        /// Writes a protocol-buffer representation of the given instance to the supplied stream,
        /// with a length-prefix. This is useful for socket programming,
        /// as DeserializeWithLengthPrefix can be used to read the single object back
        /// from an ongoing stream.
        /// </summary>
        /// <param name="type">The type being serialized.</param>
        /// <param name="value">The existing instance to be serialized (cannot be null).</param>
        /// <param name="style">How to encode the length prefix.</param>
        /// <param name="dest">The destination stream to write to.</param>
        /// <param name="fieldNumber">The tag used as a prefix to each record (only used with base-128 style prefixes).</param>
        public void SerializeWithLengthPrefix(Stream dest, object value, Type type, PrefixStyle style, int fieldNumber)
        {
            if (type == null)
            {
                if (value == null)
                {
                    throw new ArgumentNullException("value");
                }
                type = value.GetType();
            }
            int key = GetKey(ref type);

            using (ProtoWriter writer = new ProtoWriter(dest, this))
            {
                switch (style)
                {
                case PrefixStyle.None:
                    Serialize(key, value, writer);
                    break;

                case PrefixStyle.Base128:
                case PrefixStyle.Fixed32:
                case PrefixStyle.Fixed32BigEndian:
                    ProtoWriter.WriteObject(value, key, writer, style, fieldNumber);
                    break;

                default:
                    throw new ArgumentOutOfRangeException("style");
                }
                writer.Close();
            }
        }
コード例 #2
0
ファイル: TypeModel.cs プロジェクト: pinzeweifen/DCET
        public void SerializeWithLengthPrefix(Stream dest, object value, Type type, PrefixStyle style, int fieldNumber, SerializationContext context)
        {
            if (type == (Type)null)
            {
                if (value == null)
                {
                    throw new ArgumentNullException("value");
                }
                type = MapType(value.GetType());
            }
            int key = GetKey(ref type);

            using (ProtoWriter protoWriter = new ProtoWriter(dest, this, context))
            {
                if (style != 0)
                {
                    if ((uint)(style - 1) <= 2u)
                    {
                        ProtoWriter.WriteObject(value, key, protoWriter, style, fieldNumber);
                        goto IL_0069;
                    }
                    throw new ArgumentOutOfRangeException("style");
                }
                Serialize(key, value, protoWriter);
                goto IL_0069;
IL_0069:
                protoWriter.Close();
            }
        }
コード例 #3
0
 // Token: 0x06000260 RID: 608 RVA: 0x000037A6 File Offset: 0x000019A6
 void IProtoSerializer.Write(object value, ProtoWriter dest)
 {
     if (this.recursionCheck)
     {
         ProtoWriter.WriteObject(value, this.key, dest);
         return;
     }
     ProtoWriter.WriteRecursionSafeObject(value, this.key, dest);
 }
コード例 #4
0
 void IProtoSerializer.Write(object value, ProtoWriter dest)
 {
     if (recursionCheck)
     {
         ProtoWriter.WriteObject(value, key, dest);
     }
     else
     {
         ProtoWriter.WriteRecursionSafeObject(value, key, dest);
     }
 }
コード例 #5
0
 void IProtoSerializer.Write(ProtoWriter dest, ref ProtoWriter.State state, object value)
 {
     if (recursionCheck)
     {
         ProtoWriter.WriteObject(value, key, dest, ref state);
     }
     else
     {
         ProtoWriter.WriteRecursionSafeObject(value, key, dest, ref state);
     }
 }
コード例 #6
0
 void IProtoSerializer.Write(object value, ProtoWriter dest)
 {
     ProtoWriter.WriteObject(value, key, dest);
 }