public override void WriteObject(object obj, GaeaStream outStream) { if (obj == null) SerializerFactory.GetSerializer(null).WriteObject(null, outStream); Type type = obj.GetType(); uint typeId = type.GetTypeId(); outStream.WriteUInt32(typeId); if (outStream.WriteRef(obj)) { return; } object key = type.GetProperty("Key").GetValue(obj, null); object value = type.GetProperty("Value").GetValue(obj, null); var keyType = key.GetType(); outStream.Write(keyType.GetTypeId().GetBytes(), 0, 4); SerializerFactory.GetSerializer(keyType).WriteObject(key, outStream); if (value == null) { SerializerFactory.GetSerializer(null).WriteObject(value, outStream); } else { var valueType = value.GetType(); outStream.Write(valueType.GetTypeId().GetBytes(), 0, 4); SerializerFactory.GetSerializer(valueType).WriteObject(value, outStream); } }
public override void WriteObject(object obj, GaeaStream outStream) { if (obj == null) SerializerFactory.GetSerializer(null).WriteObject(null, outStream); IList list = (IList)obj; Type type = typeof(IList); uint typeId = type.GetTypeId(); outStream.WriteUInt32(typeId); if (outStream.WriteRef(obj)) { return; } outStream.WriteInt32(list.Count); foreach (var item in list) { if (item == null) { SerializerFactory.GetSerializer(null).WriteObject(item, outStream); } else { var itemType = item.GetType(); outStream.Write(itemType.GetTypeId().GetBytes(), 0, 4); SerializerFactory.GetSerializer(itemType).WriteObject(item, outStream); } } }
public override void WriteObject(object obj, GaeaStream outStream) { if (obj == null) SerializerFactory.GetSerializer(null).WriteObject(null, outStream); IDictionary dic = (IDictionary)obj; Type type = typeof(IDictionary); uint typeId = type.GetTypeId(); outStream.WriteUInt32(typeId); if (outStream.WriteRef(obj)) { return; } outStream.WriteInt32(dic.Count); foreach (DictionaryEntry item in dic) { var keyType = item.Key.GetType(); outStream.Write(keyType.GetTypeId().GetBytes(), 0, 4); SerializerFactory.GetSerializer(keyType).WriteObject(item.Key, outStream); if (item.Value == null) { SerializerFactory.GetSerializer(null).WriteObject(item.Value, outStream); } else { var valueType = item.Value.GetType(); outStream.Write(valueType.GetTypeId().GetBytes(), 0, 4); SerializerFactory.GetSerializer(valueType).WriteObject(item.Value, outStream); } } }
public override void WriteObject(object obj, GaeaStream outStream) { if (outStream.WriteRef(obj)) { return; } var buffer = outStream.Encoder.GetBytes(obj.ToString()); var bLen = buffer.Length.GetBytes(); var bytes = new byte[buffer.Length + 4]; Array.Copy(bLen, 0, bytes, 0, 4); Array.Copy(buffer, 0, bytes, 4, buffer.Length); outStream.Write(bytes, 0, bytes.Length); }
public override void WriteObject(object obj, GaeaStream outStream) { if (obj == null) { SerializerFactory.GetSerializer(null).WriteObject(null, outStream); return; } Array array = (Array)obj; Type t = obj.GetType(); Type type = t.GetElementType(); uint typeId = type.GetTypeId(); outStream.WriteUInt32(typeId); if (outStream.WriteRef(obj)) { return; } outStream.WriteInt32(array.Length); if (t == (typeof(byte))) { outStream.Write((byte[])obj, 0, array.Length); return; } if (!type.IsPrimitives()) { foreach (var item in array) { if (item == null) { SerializerFactory.GetSerializer(null).WriteObject(item, outStream); //if item is null write 0x00000000 to type } else { Type itemT = item.GetType(); uint itemTypeId = itemT.GetTypeId(); outStream.WriteUInt32(itemTypeId); SerializerFactory.GetSerializer(itemT).WriteObject(item, outStream); } } } else { foreach (var item in array) { SerializerFactory.GetSerializer(type).WriteObject(item, outStream); } } }
public override void WriteObject(object obj, GaeaStream outStream) { if (obj == null) { SerializerFactory.GetSerializer(null).WriteObject(null, outStream); return; } Type type = obj.GetType(); TypeInfo typeInfo = GetTypeInfo(type); var typId = typeInfo.TypeId.GetBytes(); outStream.Write(typId, 0, 4); if (outStream.WriteRef(obj)) return; foreach (var p in typeInfo.Properies) { var value = p.GetValue(obj, null); if (value == null) { SerializerFactory.GetSerializer(null).WriteObject(value, outStream); } else { outStream.WriteUInt32(value.GetType().GetTypeId()); if (value is IGaeaSerializer) { ((IGaeaSerializer)value).Serialize(outStream); } else { try { SerializerFactory.GetSerializer(value.GetType()).WriteObject(value, outStream); } catch (Exception err) { var e = new SerializeException(err); e.Type = type; e.PropertyName = p.Name; throw e; } } } } }