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); }); }
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; } }