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