示例#1
0
        public void AddFieldMapping(string fieldName, FieldMappingFunc func)
        {
            PropertyInfo propertyInfo;

            if (propertyMappingCache.TryGetValue(fieldName, out propertyInfo))
            {
                AddFieldMapping(propertyInfo, func);
            }
        }
示例#2
0
        private void AddFieldMapping(PropertyInfo propertyInfo, FieldMappingFunc func)
        {
            List <FieldMappingFunc> list;

            if (fieldMappingCache.TryGetValue(propertyInfo, out list) == false)
            {
                list = new List <FieldMappingFunc>();
                fieldMappingCache[propertyInfo] = list;
            }
            list.Add(func);
        }
示例#3
0
        private void AddFieldMapping(PropertyInfo propertyInfo, string jqSelector, int?index, string attrName)
        {
            List <FieldMappingFunc> list;

            if (fieldMappingCache.TryGetValue(propertyInfo, out list) == false)
            {
                list = new List <FieldMappingFunc>();
                fieldMappingCache[propertyInfo] = list;
            }
            FieldMappingFunc func = (nd, obj, pi) => {
                HtmlNode node = null;
                if (index != null)
                {
                    var nds = nd.QuerySelectorAll(jqSelector);
                    if (nds.Count > index.Value)
                    {
                        node = nds[index.Value];
                    }
                }
                else if (string.IsNullOrEmpty(jqSelector))
                {
                    node = nd;
                }
                else
                {
                    node = nd.QuerySelector(jqSelector);
                }
                if (node != null)
                {
                    try {
                        if (string.IsNullOrEmpty(attrName) == false)
                        {
                            var attr = node.Attributes[attrName];
                            if (attr != null)
                            {
                                pi.SetValue(obj, To(attr.Value, pi.PropertyType));
                                return(true);
                            }
                        }
                        else
                        {
                            pi.SetValue(obj, To(node.ToText().Trim(), pi.PropertyType));
                            return(true);
                        }
                    } catch (Exception) { }
                }
                return(false);
            };

            list.Add(func);
        }
示例#4
0
        public void AddFieldMapping <TReturn>(Expression <Func <T, TReturn> > fieldExpression, FieldMappingFunc func)
        {
            var vistor = new FieldExpVistor();

            vistor.Visit(fieldExpression);
            var fieldName = vistor.Field;

            AddFieldMapping(fieldName, func);
        }