Ejemplo n.º 1
0
 public override void WriteValue(IStreamWriter writer, ISerializeContext context, object value)
 {
     NullableWrite(writer, value, () =>
     {
         Guid guid = (Guid)value;
         var seg   = new ArraySegment <byte>(guid.ToByteArray());
         writer.WriteBytes(seg);
     });
 }
Ejemplo n.º 2
0
        public void WriteValue(IStreamWriter writer, ISerializeContext context, object value)
        {
            // Collection structure:
            // TypeID UInt32
            // ContentType Byte
            // Count Int32
            // Items...
            if (getter == null)
            {
                writer.WriteUInt32(this.TypeId); // only write collection type if element is root object

                if (context.IsWriteTypeMetaInfoRequired(this.TypeId))
                {
                    // serialize type meta info at the first time
                    TypeMetaStructure.WriteTypeMetaInfo(writer, this);
                }
            }

            if (value == null)
            {
                writer.WriteUInt8(ValueItem.NullValueIdent);
            }
            else
            {
                writer.WriteUInt8(ValueItem.CollectionObjectIdent);

                IEnumerable items;
                if (isArray)
                {
                    Array array = (Array)value;
                    writer.WriteInt32(array.Length);
                    items = array;

                    if (isByteArray)
                    {
                        writer.WriteBytes(new ArraySegment <byte>((byte[])array));
                        return;
                    }
                }
                else if (value is ICollection)
                {
                    ICollection collection = (ICollection)value;
                    writer.WriteInt32(collection.Count);
                    items = collection;
                }
                else
                {
                    items = (IEnumerable)value;

                    int count = 0;
                    foreach (var item in items)
                    {
                        count++;
                    }
                    writer.WriteInt32(count);
                }

                context.Key = this.Name;

                int index = 0;
                foreach (var item in items)
                {
                    context.ArrayIndex = index;
                    itemStructure.WriteValue(writer, context, item);
                    index++;
                }
                context.ArrayIndex = null;
            }
        }