Ejemplo n.º 1
0
        public T GetPreValue <T>(PropertyIndex propIndex, Func <PreValue, T> output, T defaultValue)
        {
            var index = (int)propIndex;
            var vals  = GetPreValues();

            return(vals.Count >= index + 1 ? output((PreValue)vals[index]) : defaultValue);
        }
Ejemplo n.º 2
0
 public TypeInfo GatherTypeInfo()
 {
     IsArray = Typ.IsArray;
     if (typeof(IDynamicMetaObjectProvider).IsAssignableFrom(Typ))
     {
         IsDynamic = true;
     }
     if (!IsArray && !IsDynamic)
     {
         Properties     = Typ.GetProperties();
         PropertyLength = Properties.Length;
         int index = 0;
         foreach (var propInfo in Properties)
         {
             PropertyIndex.Add(propInfo.Name, index);
             RetrieveAdditionalTypeInfo(propInfo, index);
             index++;
         }
     }
     else if (IsArray)
     {
         ArrayLength = Typ.GetArrayRank();
     }
     return(this);
 }
Ejemplo n.º 3
0
 private void GatherTypeInfos(Type typ)
 {
     IsArray = typ.IsArray;
     if (typeof(IDynamicMetaObjectProvider).IsAssignableFrom(typ))
     {
         IsDynamic = true;
     }
     if (!IsArray && !IsDynamic)
     {
         Properties     = typ.GetProperties();
         PropertyLength = Properties.Length;
         int index = 0;
         foreach (var propInfo in Properties)
         {
             PropertyNames.Add(propInfo.Name);
             PropertyIndex.Add(propInfo.Name, index);
             AddColumnMappingAttribute(propInfo);
             AddExcelColumnAttribute(propInfo, index);
             AddMergeIdColumnNameAttribute(propInfo);
             AddUnderlyingType(propInfo);
             index++;
         }
     }
     else if (IsArray)
     {
         ArrayLength = typ.GetArrayRank();
     }
 }
        /// <summary>
        /// 添加属性
        /// </summary>
        /// <param name="property">属性信息</param>
        /// <param name="propertyMethod">函数信息</param>
        public void PushBox(PropertyIndex property, MethodInfo propertyMethod)
        {
            Label      end            = default(Label);
            MethodInfo isOutputMethod = SerializeMethodCache.GetIsOutputMethod(property.Member.PropertyType);

            if (isOutputMethod != null)
            {
                generator.Emit(OpCodes.Ldarg_0);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 1);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_1);
                }
                generator.call(propertyMethod);
                generator.call(isOutputMethod);
                generator.Emit(OpCodes.Brfalse, end = generator.DefineLabel());
            }

            bool       isCustom = false;
            MethodInfo method   = SerializeMethodCache.GetMemberMethodInfo(property.Member.PropertyType, ref isCustom);

            if (isCustom)
            {
                LocalBuilder loadMember = generator.DeclareLocal(property.Member.PropertyType);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 1);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_1);
                }
                generator.call(propertyMethod);
                generator.Emit(OpCodes.Stloc_0);
                generator.Emit(OpCodes.Ldloca_S, loadMember);
                generator.Emit(OpCodes.Ldarg_0);
            }
            else
            {
                generator.Emit(OpCodes.Ldarg_0);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 1);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_1);
                }
                generator.call(propertyMethod);
            }
            generator.call(method);

            if (isOutputMethod != null)
            {
                generator.MarkLabel(end);
            }
        }
        private void lbx_property_names_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //get the selected proprety index
            PropertyIndex lbi = ((sender as ListBox).SelectedItem as PropertyIndex);

            gvm.changeValues(lbi);
            gvm.pressed = true;
            regLineGraph.ResetAllAxes();
        }
        public void firstTime()
        {
            lbx_property_names.SelectedIndex = 0;
            PropertyIndex prop = lbx_property_names.SelectedItem as PropertyIndex;

            propretyValue.InvalidatePlot(true);
            correlativeProprety.InvalidatePlot(true);
            regLineGraph.InvalidatePlot(true);
            gvm.changeValues(prop);
        }
Ejemplo n.º 7
0
                /// <summary>
                /// 设置属性信息
                /// </summary>
                /// <param name="property"></param>
                /// <returns></returns>
                public bool Set(PropertyIndex property)
                {
                    GetProperty = property.Member.GetGetMethod(true);
                    bool?isUtf8 = set(property.Member.PropertyType);

                    if (isUtf8 == null)
                    {
                        return((property.GetAttribute <SignMemberAttribute>(false) ?? SignMemberAttribute.Default).IsEncodeUtf8);
                    }
                    return(isUtf8.Value);
                }
Ejemplo n.º 8
0
 private void GatherTypeInfos(Type typ)
 {
     IsArray = typ.IsArray;
     if (!typ.IsArray)
     {
         Properties     = typ.GetProperties();
         PropertyLength = Properties.Length;
         int index = 0;
         foreach (var propInfo in Properties)
         {
             PropertyNames.Add(propInfo.Name);
             PropertyIndex.Add(propInfo.Name, index++);
         }
     }
 }
Ejemplo n.º 9
0
        /// <summary>
        /// Helper method to save/create pre value values in the db
        /// </summary>
        /// <param name="propIndex"></param>
        /// <param name="value"></param>
        /// <param name="currentVals"></param>
        private void SavePreValue(PropertyIndex propIndex, string value, SortedList currentVals)
        {
            var index = (int)propIndex;

            if (currentVals.Count >= ((int)propIndex + 1))
            {
                //update
                ((PreValue)currentVals[index]).Value = value;
                ((PreValue)currentVals[index]).Save();
            }
            else
            {
                //insert
                PreValue.MakeNew(m_DataType.DataTypeDefinitionId, value);
            }
        }
Ejemplo n.º 10
0
        public void SavePreValue(PropertyIndex propIndex, string value, SortedList currentVals)
        {
            var index = (int)propIndex;

            if (currentVals.Count >= (index + 1))
            {
                ((PreValue)currentVals[index]).Value     = value;
                ((PreValue)currentVals[index]).SortOrder = index + 1;
                ((PreValue)currentVals[index]).Save();
            }
            else
            {
                PreValue preValue = PreValue.MakeNew(_dataType.DataTypeDefinitionId, value);
                preValue.SortOrder = index + 1;
                preValue.Save();
            }
        }
Ejemplo n.º 11
0
 private void GatherTypeInfos(Type typ)
 {
     IsArray = typ.IsArray;
     if (!typ.IsArray)
     {
         Properties     = typ.GetProperties();
         PropertyLength = Properties.Length;
         int index = 0;
         foreach (var propInfo in Properties)
         {
             PropertyNames.Add(propInfo.Name);
             PropertyIndex.Add(propInfo.Name, index);
             AddColumnMappingAttribute(propInfo);
             AddExcelColumnAttribute(propInfo, index);
             index++;
         }
     }
 }
Ejemplo n.º 12
0
        /// <summary>Returns the set of events that have the same property value as the given event. </summary>
        /// <param name="keys">to compare against</param>
        /// <returns>set of events with property value, or null if none found (never returns zero-sized set)</returns>
        public override ISet <EventBean> Lookup(Object[] keys)
        {
            for (int i = 0; i < keys.Length; i++)
            {
                var coercionType = CoercionTypes[i];
                var key          = keys[i];

                if ((key != null) && (key.GetType() != coercionType))
                {
                    if (key.IsNumber())
                    {
                        key     = CoercerFactory.CoerceBoxed(key, CoercionTypes[i]);
                        keys[i] = key;
                    }
                }
            }

            return(PropertyIndex.Get(new MultiKeyUntyped(keys)));
        }
Ejemplo n.º 13
0
        /// <summary>
        /// 添加属性
        /// </summary>
        /// <param name="property">属性信息</param>
        /// <param name="propertyMethod">函数信息</param>
        public void Push(PropertyIndex property, MethodInfo propertyMethod)
        {
            Label end = generator.DefineLabel();

            push(property.Member.Name, property.MemberIndex, end);
            bool       isCustom = false;
            MethodInfo method   = SerializeMethodCache.GetMemberMethodInfo(property.Member.PropertyType, ref isCustom);

            if (isCustom)
            {
                LocalBuilder loadMember = generator.DeclareLocal(property.Member.PropertyType);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 2);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_2);
                }
                generator.call(propertyMethod);
                generator.Emit(OpCodes.Stloc_0);
                generator.Emit(OpCodes.Ldloca_S, loadMember);
                generator.Emit(OpCodes.Ldarg_1);
            }
            else
            {
                generator.Emit(OpCodes.Ldarg_1);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 2);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_2);
                }
                generator.call(propertyMethod);
            }
            generator.call(method);
            generator.MarkLabel(end);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// 添加属性
        /// </summary>
        /// <param name="property">属性信息</param>
        /// <param name="propertyMethod">函数信息</param>
        public void Push(PropertyIndex property, MethodInfo propertyMethod)
        {
            isName();

            Type         memberType = property.Member.PropertyType;
            LocalBuilder loadMember = generator.DeclareLocal(memberType);

            generator.initobj(memberType, loadMember);
            bool       isCustom = false;
            MethodInfo method   = ParseMethodCache.GetMemberMethodInfo(memberType, ref isCustom);

            if (isCustom)
            {
                generator.Emit(OpCodes.Ldloca, loadMember);
                generator.Emit(OpCodes.Ldarg_0);
            }
            else
            {
                generator.Emit(OpCodes.Ldarg_0);
                generator.Emit(OpCodes.Ldloca, loadMember);
            }
            generator.call(method);

            generator.Emit(OpCodes.Ldarg_1);
            if (!isValueType)
            {
                generator.Emit(OpCodes.Ldind_Ref);
            }
            generator.Emit(OpCodes.Ldloc, loadMember);
            generator.call(propertyMethod);

            nextIndex();
            if (isMemberMap)
            {
                generator.memberMapSetMember(OpCodes.Ldarg_3, property.MemberIndex);
            }
        }
Ejemplo n.º 15
0
        public override string ToString()
        {
            string snn = null;

            if (PropertyIndex >= 0)
            {
                snn = PropertyIndex.ToString() + ", ";
            }
            snn +=
                ChPhisical.ToString() +
                ", " + ranges[Range] +
                ", " + modes[Mode] +
                ", " + Avg.ToString() +
                ", " + Gain.ToString();
            if (IOffset != 0)
            {
                snn += ", " + IOffset.ToString();
            }
            if (IsPersent)
            {
                snn += ", %";
            }
            return(snn);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// 添加属性
        /// </summary>
        /// <param name="property">属性信息</param>
        /// <param name="propertyMethod">函数信息</param>
        public void PushBox(PropertyIndex property, MethodInfo propertyMethod)
        {
            bool       isCustom = false;
            MethodInfo method   = SerializeMethodCache.GetMemberMethodInfo(property.Member.PropertyType, ref isCustom);

            if (isCustom)
            {
                LocalBuilder loadMember = generator.DeclareLocal(property.Member.PropertyType);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 1);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_1);
                }
                generator.call(propertyMethod);
                generator.Emit(OpCodes.Stloc_0);
                generator.Emit(OpCodes.Ldloca_S, loadMember);
                generator.Emit(OpCodes.Ldarg_0);
            }
            else
            {
                generator.Emit(OpCodes.Ldarg_0);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 1);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_1);
                }
                generator.call(propertyMethod);
            }
            generator.call(method);
        }
 /// <summary>Returns the set of events that have the same property value as the given event. </summary>
 /// <returns>set of events with property value, or null if none found (never returns zero-sized set)</returns>
 public override ISet <EventBean> Lookup(Object key)
 {
     key = EventBeanUtility.Coerce(key, _coercionType);
     return(PropertyIndex.Get(key));
 }
        /// <summary>
        /// 添加属性
        /// </summary>
        /// <param name="property">属性信息</param>
        /// <param name="propertyMethod">函数信息</param>
        /// <param name="attribute">XML序列化成员配置</param>
        public void Push(PropertyIndex property, MethodInfo propertyMethod, MemberAttribute attribute)
        {
            Label end = generator.DefineLabel();

            generator.memberMapIsMember(OpCodes.Ldarg_0, property.MemberIndex);
            generator.Emit(OpCodes.Brfalse, end);

            MethodInfo isOutputMethod = SerializeMethodCache.GetIsOutputMethod(property.Member.PropertyType);

            if (isOutputMethod != null)
            {
                generator.Emit(OpCodes.Ldarg_1);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 2);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_2);
                }
                generator.call(propertyMethod);
                generator.call(isOutputMethod);
                generator.Emit(OpCodes.Brfalse, end);
            }
            SerializeMemberDynamicMethod.WriteName(generator, OpCodes.Ldloc_0, property.Member.Name, false);

            if (attribute != null && attribute.ItemName != null)
            {
                generator.Emit(OpCodes.Ldarg_1);
                generator.Emit(OpCodes.Ldstr, attribute.ItemName);
                generator.Emit(OpCodes.Stfld, SerializeMemberDynamicMethod.ItemNameField);
            }
            bool       isCustom = false;
            MethodInfo method   = SerializeMethodCache.GetMemberMethodInfo(property.Member.PropertyType, ref isCustom);

            if (isCustom)
            {
                LocalBuilder loadMember = generator.DeclareLocal(property.Member.PropertyType);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 2);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_2);
                }
                generator.call(propertyMethod);
                generator.Emit(OpCodes.Stloc_0);
                generator.Emit(OpCodes.Ldloca_S, loadMember);
                generator.Emit(OpCodes.Ldarg_1);
            }
            else
            {
                generator.Emit(OpCodes.Ldarg_1);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 2);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_2);
                }
                generator.call(propertyMethod);
            }
            generator.call(method);

            SerializeMemberDynamicMethod.WriteName(generator, OpCodes.Ldloc_0, property.Member.Name, true);

            generator.MarkLabel(end);
        }
Ejemplo n.º 19
0
        ///<summary>
        /// Generic method to return a strongly typed object from the pre value bucket
        ///</summary>
        ///<param name="index"></param>
        ///<param name="output"></param>
        ///<param name="defaultVal"></param>
        ///<typeparam name="T"></typeparam>
        ///<returns></returns>
        private T GetPreValue <T>(PropertyIndex index, Func <PreValue, T> output, T defaultVal)
        {
            var vals = GetPreValues();

            return(vals.Count >= (int)index + 1 ? output((PreValue)vals[(int)index]) : defaultVal);
        }
Ejemplo n.º 20
0
 public override string ToString()
 {
     return(PropertyIndex.ToString());
 }
Ejemplo n.º 21
0
        public PropertyIndex GetPropertySearch(int pageSize, int pageIndex)
        {
            DateTime start = DateTime.Now;

            using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=dinhgianhadat.vn;Integrated Security=True;MultipleActiveResultSets=True;"))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand("SP_F_Property_dgnd_Search", conn);
                cmd.CommandType = CommandType.StoredProcedure;

                //var priceFirst = GetListPropertyPriceStatic().FirstOrDefault(r => r.Id == options.PriceId && r.AdsType == options.AdsTypeId);
                //options.MinPriceProposed = priceFirst != null ? priceFirst.FromValue : options.MinPriceProposed;
                //options.MaxPriceProposed = priceFirst != null ? priceFirst.ToValue : options.MaxPriceProposed;

                //var areaFirst = GetListPropertyAreaStatic().FirstOrDefault(r => r.Id == options.AreaId);
                //options.MinAreaTotal = areaFirst != null ? areaFirst.FromValue : options.MinAreaTotal;
                //options.MaxAreaTotal = areaFirst != null ? areaFirst.ToValue : options.MaxAreaTotal;
                //options.WardId = options.WardId == 0 ? -1 : options.WardId;

                cmd.Parameters.AddWithValue("@pageSize", pageSize);
                cmd.Parameters.AddWithValue("@pageIndex", pageIndex);

                //cmd.Parameters.AddWithValue("@domainGroupId", options.DomainGroupId);
                //cmd.Parameters.AddWithValue("@adsTypeId", options.AdsTypeId);
                //cmd.Parameters.AddWithValue("@provinceId", options.ProvinceId);

                //cmd.Parameters.AddWithValue("@districtId", options.DistrictId);
                //cmd.Parameters.AddWithValue("@wardId", options.WardId);
                //cmd.Parameters.AddWithValue("@streetId", options.StreetId);

                //cmd.Parameters.AddWithValue("@apartmentId", options.ApartmentId);
                //cmd.Parameters.AddWithValue("@directionId", options.DirectionId);
                //cmd.Parameters.AddWithValue("@locationId", options.LocationId);

                //cmd.Parameters.AddWithValue("@MinAreaTotal", options.MinAreaTotal);
                //cmd.Parameters.AddWithValue("@MaxAreaTotal", options.MaxAreaTotal);

                //cmd.Parameters.AddWithValue("@MinPriceProposed", options.MinPriceProposed);
                //cmd.Parameters.AddWithValue("@MaxPriceProposed", options.MaxPriceProposed);
                //NOTE: @typeCssClassesLand has been hard code in DB

                //added 27/03/2016
                var reader = cmd.ExecuteReader();

                var model = new PropertyIndex();
                model.ListProperties = new List <PropertyItem>();

                reader.Read();
                int total = (int)reader["TotalCount"];
                model.TotalCount = total;

                // gets the second
                reader.NextResult();
                while (reader.Read())
                {
                    var item = new PropertyItem
                    {
                        Id                  = int.Parse(reader["Id"].ToString()),
                        Content             = reader["Content"].ToString(),
                        Title               = reader["Title"].ToString(),
                        Note                = reader["Note"].ToString(),
                        Floors              = ConvertUtility.ToDouble(reader["Floors"].ToString()),
                        Bedrooms            = ConvertUtility.ToInt32(reader["Bedrooms"].ToString()),
                        Bathrooms           = ConvertUtility.ToInt32(reader["Bathrooms"].ToString()),
                        AddressNumber       = reader["AddressNumber"].ToString(),
                        AddressCorner       = reader["AddressCorner"].ToString(),
                        CreatedDate         = ConvertUtility.ToDateTime(reader["CreatedDate"].ToString(), default(DateTime)),
                        LastUpdatedDate     = ConvertUtility.ToDateTime(reader["LastUpdatedDate"].ToString(), default(DateTime)),
                        AdsExpirationDate   = ConvertUtility.ToDateTime(reader["AdsExpirationDate"].ToString(), default(DateTime)),
                        AlleyWidth          = !string.IsNullOrEmpty(reader["AlleyWidth"].ToString()) ? double.Parse(reader["AlleyWidth"].ToString()) : default(double),
                        PriceProposed       = ConvertUtility.ToDouble(reader["PriceProposed"].ToString()),
                        PriceProposedInVND  = ConvertUtility.ToDouble(reader["PriceProposedInVND"].ToString()),  //--
                        PriceEstimatedInVND = ConvertUtility.ToDouble(reader["PriceEstimatedInVND"].ToString()), //--
                        AreaUsable          = ConvertUtility.ToDouble(reader["AreaUsable"].ToString()),
                        AreaTotalWidth      = ConvertUtility.ToDouble(reader["AreaTotalWidth"].ToString()),
                        AreaTotalLength     = ConvertUtility.ToDouble(reader["AreaTotalLength"].ToString()),
                        AreaTotal           = ConvertUtility.ToDouble(reader["AreaTotal"].ToString()),
                        ApartmentId         = ConvertUtility.ToInt32(reader["ApartmentId"].ToString()),
                        AdsType             = new PropertyBase
                        {
                            ShortName = reader["AdsTypeShortName"].ToString(),
                            CssClass  = reader["AdsTypeCssClass"].ToString(),
                            Id        = int.Parse(reader["AdsTypeId"].ToString())
                        },

                        Location = new PropertyBase
                        {
                            Id        = ConvertUtility.ToInt32(reader["LocationId"].ToString()),
                            CssClass  = reader["LocationCssClass"].ToString(),
                            Name      = reader["LocationName"].ToString(),
                            ShortName = reader["LocationShortName"].ToString()
                        },
                        PaymentMethod = new PropertyBase
                        {
                            Id        = ConvertUtility.ToInt32(reader["PaymentMethodId"].ToString()),
                            Name      = reader["PaymentMethodName"].ToString(),
                            CssClass  = reader["PaymentMethodCssClass"].ToString(),
                            ShortName = reader["PaymentMethodShortName"].ToString()
                        },


                        ImageDefaultAvatar = reader["ImageDefaultAvatar"].ToString()
                    };

                    model.ListProperties.Add(item);
                }
                reader.Close();

                return(model);
            }
        }
Ejemplo n.º 22
0
 public void Given()
 {
     _index = new PropertyIndex<Foo>(_fs, _path, "AwesomeIndex", f => new { f.Name });
     _index.Inspect(5, new Foo { Name = "Arthur" });
 }
Ejemplo n.º 23
0
        /// <summary>
        /// 添加属性
        /// </summary>
        /// <param name="property"></param>
        /// <param name="index"></param>
        /// <returns>是否需要utf-8编码</returns>
        public bool Push(PropertyIndex property, int index)
        {
            Type       type   = property.Member.PropertyType;
            MethodInfo method = property.Member.GetGetMethod(true);

            if (type.IsValueType)
            {
                MethodInfo numberToStringMethod;
                if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable <>))
                {
                    AutoCSer.Metadata.StructGenericType StructGenericType = AutoCSer.Metadata.StructGenericType.Get(type);
                    Label end = generator.DefineLabel();
                    if (isValueType)
                    {
                        generator.Emit(OpCodes.Ldarga_S, 0);
                    }
                    else
                    {
                        generator.Emit(OpCodes.Ldarg_0);
                    }
                    generator.Emit(OpCodes.Call, method);
                    generator.Emit(OpCodes.Call, StructGenericType.GetNullableHasValueMethod);
                    generator.Emit(OpCodes.Brfalse_S, end);
                    generator.Emit(OpCodes.Ldarg_1);
                    generator.int32(index);
                    if (isValueType)
                    {
                        generator.Emit(OpCodes.Ldarga_S, 0);
                    }
                    else
                    {
                        generator.Emit(OpCodes.Ldarg_0);
                    }
                    generator.Emit(OpCodes.Call, method);
                    generator.Emit(OpCodes.Call, StructGenericType.GetNullableValueMethod);
                    Type nullableType = type.GetGenericArguments()[0];
                    if (nullableType.IsEnum)
                    {
                        numberToStringMethod = null;
                        generator.Emit(OpCodes.Box, nullableType);
                        generator.Emit(OpCodes.Callvirt, AutoCSer.Net.WebClient.Emit.Pub.GetToStringMethod(typeof(object)));
                    }
                    else
                    {
                        generator.Emit(OpCodes.Call, (numberToStringMethod = AutoCSer.Net.WebClient.Emit.Pub.GetNumberToStringMethod(nullableType)) ?? AutoCSer.Net.WebClient.Emit.Pub.GetToStringMethod(nullableType));
                    }
                    generator.Emit(OpCodes.Stelem_Ref);
                    generator.MarkLabel(end);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_1);
                    generator.int32(index);
                    if (isValueType)
                    {
                        generator.Emit(OpCodes.Ldarga_S, 0);
                    }
                    else
                    {
                        generator.Emit(OpCodes.Ldarg_0);
                    }
                    generator.Emit(OpCodes.Call, method);
                    if (type.IsEnum)
                    {
                        numberToStringMethod = null;
                        generator.Emit(OpCodes.Box, type);
                        generator.Emit(OpCodes.Callvirt, AutoCSer.Net.WebClient.Emit.Pub.GetToStringMethod(typeof(object)));
                    }
                    else
                    {
                        generator.Emit(OpCodes.Call, (numberToStringMethod = AutoCSer.Net.WebClient.Emit.Pub.GetNumberToStringMethod(type)) ?? AutoCSer.Net.WebClient.Emit.Pub.GetToStringMethod(type));
                    }
                    generator.Emit(OpCodes.Stelem_Ref);
                }
                if (numberToStringMethod != null)
                {
                    return(false);
                }
            }
            else
            {
                Label end = default(Label);
                if (type != typeof(string))
                {
                    if (isValueType)
                    {
                        generator.Emit(OpCodes.Ldarga_S, 0);
                    }
                    else
                    {
                        generator.Emit(OpCodes.Ldarg_0);
                    }
                    generator.call(method);
                    generator.Emit(OpCodes.Brfalse_S, end = generator.DefineLabel());
                }
                generator.Emit(OpCodes.Ldarg_1);
                generator.int32(index);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 0);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_0);
                }
                generator.call(method);
                if (type != typeof(string))
                {
                    generator.Emit(OpCodes.Callvirt, AutoCSer.Net.WebClient.Emit.Pub.GetToStringMethod(type));
                }
                generator.Emit(OpCodes.Stelem_Ref);
                if (type != typeof(string))
                {
                    generator.MarkLabel(end);
                }
            }
            return((property.GetAttribute <SignMemberAttribute>(false) ?? SignMemberAttribute.Default).IsEncodeUtf8);
        }
Ejemplo n.º 24
0
        /// <summary>
        /// 添加属性
        /// </summary>
        /// <param name="property">属性信息</param>
        /// <param name="propertyMethod">函数信息</param>
        /// <param name="attribute">XML序列化成员配置</param>
        public void Push(PropertyIndex property, MethodInfo propertyMethod, MemberAttribute attribute)
        {
            Label      end            = default(Label);
            MethodInfo isOutputMethod = SerializeMethodCache.GetIsOutputMethod(property.Member.PropertyType);

            if (isOutputMethod != null)
            {
                generator.Emit(OpCodes.Ldarg_0);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 1);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_1);
                }
                generator.call(propertyMethod);
                generator.call(isOutputMethod);
                generator.Emit(OpCodes.Brfalse_S, end = generator.DefineLabel());
            }

            nameStart(property.Member.Name, attribute);
            bool       isCustom = false;
            MethodInfo method   = SerializeMethodCache.GetMemberMethodInfo(property.Member.PropertyType, ref isCustom);

            if (isCustom)
            {
                LocalBuilder loadMember = generator.DeclareLocal(property.Member.PropertyType);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 1);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_1);
                }
                generator.call(propertyMethod);
                generator.Emit(OpCodes.Stloc_0);
                generator.Emit(OpCodes.Ldloca_S, loadMember);
                generator.Emit(OpCodes.Ldarg_0);
            }
            else
            {
                generator.Emit(OpCodes.Ldarg_0);
                if (isValueType)
                {
                    generator.Emit(OpCodes.Ldarga_S, 1);
                }
                else
                {
                    generator.Emit(OpCodes.Ldarg_1);
                }
                generator.call(propertyMethod);
            }
            generator.call(method);

            generator.charStreamSimpleWriteNotNull(OpCodes.Ldloc_0, SerializeMethodCache.GetNameEndPool(property.Member.Name), property.Member.Name.Length + 3);

            if (isOutputMethod != null)
            {
                generator.MarkLabel(end);
            }
        }
Ejemplo n.º 25
0
        static PropertyIndex ParseIndex(string Index)
        {
            PropertyIndex pIndex = new PropertyIndex();

            List<Type> pTypes = new List<Type>();
            List<object> pValues = new List<object>();

            int indexValue = 0;
            string[] Indexes = Index.Split(',');
            for (int i = 0; i < Indexes.Length; i++)
            {
                if (Indexes[i] == "")
                {
                    continue;
                }
                else if (int.TryParse(Indexes[i], out indexValue))
                {
                    pTypes.Add(typeof(int));
                    pValues.Add(indexValue);
                }
                else if (Indexes[i].StartsWith("'") && Indexes[i].EndsWith("'"))
                {
                    pTypes.Add(typeof(string));
                    pValues.Add(
                        Indexes[i].Substring(1, Indexes[i].Length - 2)
                        );
                }
                else
                {
                    throw new Exception(
                        string.Format("Parse Error On Index[{0}]@[{1}]", Indexes[i], Index)
                        );
                }
            }

            pIndex.Types = pTypes.ToArray();
            pIndex.Value = pValues.ToArray();

            return pIndex;
        }