Esempio n. 1
0
 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);
     }
 }
Esempio n. 2
0
 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);
         }
     }
 }
Esempio n. 3
0
 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);
         }
     }
 }
Esempio n. 4
0
 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);
 }
Esempio n. 5
0
 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);
         }
     }
 }
Esempio n. 6
0
        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;
                        }

                    }
                }
            }
        }