Esempio n. 1
0
 /// <summary>
 /// 获取具体大小
 /// </summary>
 /// <param name="attr">特性</param>
 /// <param name="clazz">类型</param>
 /// <returns></returns>
 private static int GetSpecificSize(AdvancedObjectMarshalAsAttribute attr, Type clazz)
 {
     if (attr != null && attr.SizeConst > 0)
     {
         return(attr.SizeConst);
     }
     return(ValueTypeUtils.SizeBy(clazz));
 }
Esempio n. 2
0
        /// <summary>
        /// 添加值到流中
        /// </summary>
        private static bool AddValueToStream(Type clazz, object value, AdvancedObjectMarshalAsAttribute attr, BinaryWriter bw)
        {
            int size = ValueTypeUtils.SizeBy(clazz);

            if (size > 0)
            {
                if (ValueTypeUtils.IsFloatType(clazz))
                {
                    bw.Write(AdvancedObjectFormatter.As(ValueTypeUtils.BinaryBy(clazz, Convert.ToDouble(value)), attr));
                }
                else
                {
                    if (ValueTypeUtils.IsDateTime(clazz))
                    {
                        value = Convert.ToDateTime(value).Ticks;
                    }
                    if (ValueTypeUtils.IsULong(clazz))
                    {
                        value = unchecked ((long)(ulong)value);
                    }
                    if (ValueTypeUtils.IsIPAddress(clazz))
                    {
                        value = BitConverter.ToInt32(((IPAddress)value).GetAddressBytes(), 0);
                    }
                    bw.Write(AdvancedObjectFormatter.As(ValueTypeUtils.BinaryBy(clazz, Convert.ToInt64(value), size), attr));
                }
                return(true);
            }
            else
            {
                if (AdvancedObjectFormatter.AddStringToStream(clazz, value as string, attr, bw))
                {
                    return(true);
                }
                if (AdvancedObjectFormatter.AddListToStream(clazz, value as IList, attr, bw))
                {
                    return(true);
                }
                if (AdvancedObjectFormatter.AddObjectToStream(value, clazz, bw, attr))
                {
                    return(true);
                }
            }
            return(false);
        }