Exemple #1
0
 /// <summary>
 /// 获取指定类型的属性访问缓存。
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 private List <PropertyGetAccessorCache> GetAccessorCache(Type type)
 {
     return(context.GetAccessors.TryGetValue(type, () =>
     {
         return type.GetProperties()
         .Where(s => s.CanRead && !SerializerUtil.IsNoSerializable(option, s))
         .Distinct(new SerializerUtil.PropertyEqualityComparer())
         .Select(s => new PropertyGetAccessorCache
         {
             Accessor = ReflectionCache.GetAccessor(s),
             Filter = (p, l) =>
             {
                 return !SerializerUtil.CheckLazyValueCreate(l, p.Name);
             },
             PropertyInfo = s,
             PropertyName = SerializerUtil.GetPropertyName(s)
         })
         .Where(s => !string.IsNullOrEmpty(s.PropertyName))
         .ToList();
     }));
 }
 /// <summary>
 /// 获取指定类型的属性访问缓存。
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 public List <PropertyGetAccessorCache> GetAccessorCache(Type type)
 {
     return(GetAccessors.TryGetValue(type, () =>
     {
         return type.GetProperties()
         .Where(s => s.CanRead && !SerializerUtil.IsNoSerializable(Option, s))
         .Distinct(new SerializerUtil.PropertyEqualityComparer())
         .Select(s => new PropertyGetAccessorCache
         {
             Accessor = ReflectionCache.GetAccessor(s),
             Filter = (p, l) =>
             {
                 return !SerializerUtil.CheckLazyValueCreate(l, p.Name);
             },
             PropertyInfo = s,
             PropertyName = SerializerUtil.GetPropertyName(s),
             Formatter = s.GetCustomAttributes <TextFormatterAttribute>().FirstOrDefault()?.Formatter,
             DefaultValue = s.GetCustomAttributes <DefaultValueAttribute>().FirstOrDefault()?.Value,
             Converter = s.GetCustomAttributes <TextPropertyConverterAttribute>().FirstOrDefault()?.ConverterType.New <ITextConverter>()
         })
         .Where(s => !string.IsNullOrEmpty(s.PropertyName))
         .ToList();
     }));
 }