public override Object read(POxOPrimitiveDecoder decoder)
    {
        try
        {
            if (canBeNull)
            {
                byte isNull = (byte)decoder.ReadByte();
                if (isNull == 0x00)
                {
                    return null;
                }
            }
            int size = decoder.readVarInt(true);

            IList list = (IList)typeof(List<>).MakeGenericType(genericTypes).GetConstructor(Type.EmptyTypes).Invoke(null);

            for (int i = 0; i < size; i++)
            {
                Object o = (Object)nestedSerializer.read(decoder);
                list.Add(o);
            }

            return list;
        }
        catch (ObjectDisposedException e)
        {
            throw new POxOSerializerException("Error during List deserializing.", e);
        }
    }
    public override Object read(POxOPrimitiveDecoder decoder)
    {
        try
        {
            if (canBeNull)
            {
                byte isNull = (byte)decoder.ReadByte();
                if (isNull == 0x00)
                {
                    return null;
                }
            }
            int size = decoder.readVarInt(true);

            var list = (IDictionary)typeof(Dictionary<,>).MakeGenericType(new Type[] { keyObjectClass, valueObjectClass }).GetConstructor(Type.EmptyTypes).Invoke(null);

            for (int i = 0; i < size; i++)
            {
                Object key = keyNestedSerializer.read(decoder);
                Object value = valueNestedSerializer.read(decoder);
                list.Add(key, value);
            }

            return list;
        }
        catch (ObjectDisposedException e)
        {
            throw new POxOSerializerException("Error during List deserializing.", e);
        }
    }
 public override Object read(POxOPrimitiveDecoder decoder)
 {
     try
     {
         if (canBeNull)
         {
             byte isNull = (byte)decoder.ReadByte();
             if (isNull == 0x00)
             {
                 return null;
             }
         }
         return (sbyte)decoder.ReadByte();
     }
     catch (ObjectDisposedException e)
     {
         throw new POxOSerializerException("Error during Date serializing.", e);
     }
 }
 public override Object read(POxOPrimitiveDecoder decoder)
 {
     try
     {
         if (canBeNull)
         {
             byte isNull = (byte)decoder.ReadByte();
             if (isNull == 0x00)
             {
                 return null;
             }
         }
         DateTime value = DateTime.FromFileTime(decoder.readLong(true));
         return value;
     }
     catch (ObjectDisposedException e)
     {
         throw new POxOSerializerException("Error during Date deserializing.", e);
     }
     catch (NotSupportedException e)
     {
         throw new POxOSerializerException("Error during Date deserializing.", e);
     }
 }