Пример #1
0
        public override Association GetAssociation(TypeExtension typeExtension, MemberAccessor member)
        {
            if (typeExtension == TypeExtension.Null)
            {
                return(null);
            }

            MemberExtension mex = typeExtension[member.Name];

            if (mex == MemberExtension.Null)
            {
                return(null);
            }

            AttributeExtensionCollection attrs = mex.Attributes[TypeExtension.NodeName.Association];

            if (attrs == AttributeExtensionCollection.Null)
            {
                return(null);
            }

            return(new Association(
                       member,
                       Association.ParseKeys(attrs[0]["ThisKey", string.Empty].ToString()),
                       Association.ParseKeys(attrs[0]["OtherKey", string.Empty].ToString()),
                       attrs[0]["Storage", string.Empty].ToString(),
                       TypeExtension.ToBoolean(attrs[0]["Storage", "True"], true)));
        }
Пример #2
0
 private static Expression GenerateKeyValueObjectReadValue(MemberExtension member, ParameterExpression newModel)
 {
     if (!member.IsProperty || (member.IsProperty && member.PropertyInfo.CanWrite))
     {
         var valueFormatAttribute = member.MemberInfo.GetCustomAttribute <ValueFormatAttribute>() ?? member.MemberInfo.DeclaringType.GetCustomAttribute <ValueFormatAttribute>();
         if (valueFormatAttribute != null)//part
         {
             return(GenerateValueFormatCode(Expression.Constant(valueFormatAttribute, typeof(ValueFormatAttribute)), ValueFormatAttribute._ReadValueFormat, new[] { ExpressionMembers.JsonRemoveQuoteAndSubstring, Expression.Constant(member.Type, typeof(Type)), ExpressionMembers.JsonDeserializeHandler, ExpressionMembers.IsValueFormat }, newModel, member));
         }
         else //global
         {
             /*
              * if( jsonDeserializeHandler.jsonDeserializeOption .globalValueFormat!=null)
              * {
              * }
              * else
              *   model.N=ReadJson();
              */
             return(Expression.IfThenElse(ExpressionMembers.GlobalValueFormatNotEqualNull, GenerateValueFormatCode(ExpressionMembers.GlobalValueFormat, JsonDeserializeOption._GlobalValueFormatInvoke, new[] { ExpressionMembers.JsonRemoveQuoteAndSubstring, Expression.Constant(member.Type, typeof(Type)), ExpressionMembers.JsonDeserializeHandler, ExpressionMembers.IsValueFormat }, newModel, member), Expression.Assign(Expression.MakeMemberAccess(newModel, member.MemberInfo), ExpressionMembers.GetMethodCall(member.Type))));
         }
     }
     else
     {
         /*   SkipObj(); */
         return(Expression.Call(ExpressionMembers.Reader, JsonReader._SkipObj, ExpressionMembers.JsonDeserializeHandler));
     }
 }
Пример #3
0
 private static void MergeExtensions(MemberExtension fromExt, ref MemberExtension toExt)
 {
     foreach (var attribute in fromExt.Attributes)
     {
         if (toExt.Attributes.ContainsKey(attribute.Key))
         {
             toExt.Attributes.Remove(attribute.Key);
         }
         toExt.Attributes.Add(attribute.Key, attribute.Value);
     }
 }
Пример #4
0
        protected MemberExtension GetMemberExtension(string name)
        {
            MemberExtension member;

            if (!this._typeExtension.Members.TryGetValue(name, out member))
            {
                member = new MemberExtension {
                    Name = name
                };
                this._typeExtension.Members.Add(member);
            }
            return(member);
        }
Пример #5
0
        /// <summary>
        /// Maps the value.
        /// </summary>
        /// <typeparam name="TV">The type of the V.</typeparam>
        /// <param name="origValue">The orig value.</param>
        /// <param name="value">The value.</param>
        /// <param name="values">The values.</param>
        void IFluentMap.MapValue <TV>(Enum origValue, TV value, TV[] values)
        {
            MemberExtension member;
            var             name = Enum.GetName(origValue.GetType(), origValue);

            if (!this._typeExtension.Members.TryGetValue(name, out member))
            {
                member = new MemberExtension {
                    Name = name
                };
                this._typeExtension.Members.Add(member);
            }
            this.FillMapValueExtension(member.Attributes, origValue, value, values);
            this.EachChilds(m => m.MapValue(origValue, value, values));
        }
Пример #6
0
        internal void Insert(string str, MemberExtension mem)
        {
            CharTries charTries = this;

            foreach (var c in str)
            {
                var @case = charTries.Childrens.Find(e => e.Val == c);
                if (@case == null)
                {
                    @case = new CharTries()
                    {
                        Val = c, Parent = charTries
                    };
                    charTries.Childrens.Add(@case);
                }
                charTries = @case;
            }
            charTries.IsValue = true;
            charTries.Member  = mem;
        }
Пример #7
0
        private static BlockExpression GenerateValueFormatCode(Expression formatDeclareInstance, MethodInfo callFormat, Expression[] paras, ParameterExpression newModel, MemberExtension member)
        {
            Expression[] expressions = new Expression[6];

            /*
             * reader.BeforAnnotation();
             * reader.RollBackChar()
             */
            expressions[0] = Expression.Call(ExpressionMembers.Reader, JsonReader._BeforAnnotation);
            expressions[1] = Expression.Call(ExpressionMembers.Reader, JsonReader._RollbackChar);

            /*
             * currentIdx= Length - reader.Remaining
             */
            expressions[2] = ExpressionMembers.CurrentIdxAssignReming;

            /*
             * valueLength=reader.Skipobj()
             */
            expressions[3] = (ExpressionMembers.ValueLengthAssignSkipObj);

            /*
             * object formatResult = ValueFormat.ReadValueFormat(  reader.Substring(currentIdx,valueLength) ,out isValueFormat);
             */
            expressions[4] = (Expression.Assign(ExpressionMembers.FormatResult, Expression.Call(formatDeclareInstance, callFormat, paras)));

            /*
             * if(isValueFormat==true)
             *   model.N=(Convert)obj;
             * else
             *  reader.Rollback(valueLength)
             *  m.N=ReadJson();//string
             */
            expressions[5] = (Expression.IfThenElse(ExpressionMembers.IsValueFormatEqualTrue, Expression.Assign(Expression.MakeMemberAccess(newModel, member.MemberInfo), Expression.Convert(ExpressionMembers.FormatResult, member.Type)), Expression.Block(Expression.Call(ExpressionMembers.Reader, JsonReader._Rollback, ExpressionMembers.ValueLength), Expression.Assign(Expression.MakeMemberAccess(newModel, member.MemberInfo), ExpressionMembers.GetMethodCall(member.Type)))));

            return(Expression.Block(expressions));
        }