/// <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(); })); }