public TypeSerializationInfo(Type type, IEnumerable <PropertyInfo> properties) { Type = type; TypeName = TypeHelper.FormatBinary(Type); IsAttribute = TypeHelper.IsXmlAttribute(Type); if (IsAttribute) { Serialazer = TypeHelper.GetValueSerializer(type); return; } if (!Type.IsInterface) { Constructor = EmitInvoker.Initialize(type, Type.EmptyTypes); } IsList = TypeHelper.IsList(type); if (IsList) { IsNamedList = TypeHelper.IsInterface(type, typeof(INamedList)); ListItemType = TypeHelper.GetItemType(type); ListDefaulType = ListItemType != typeof(object) && !ListItemType.IsInterface && !type.IsGenericType && !type.IsArray && !TypeHelper.IsInterface(type, typeof(ISortable)); ListItemIsAttribute = TypeHelper.IsXmlAttribute(ListItemType); ListConstructor = EmitInvoker.Initialize(type, new[] { typeof(int) }); } IsDictionary = TypeHelper.IsDictionary(type); Properties = new NamedList <PropertySerializationInfo>(); Properties.Indexes.Add(PropertySaveInfoIsAttributeInvoker.Instance); foreach (var property in properties) { if (TypeHelper.IsNonSerialize(property)) { var exist = GetProperty(property.Name); if (exist != null) { Properties.Remove(exist); } continue; } var info = new PropertySerializationInfo(property); { var exist = GetProperty(info.Name); if (exist != null) { Properties.Remove(exist); } Properties.Add(info); } } }
public PropertySerializationInfo(PropertyInfo property) { Property = property; IsText = TypeHelper.IsXmlText(property); IsAttribute = TypeHelper.IsXmlAttribute(property) && !IsText; Invoker = EmitInvoker.Initialize(property, true); Default = TypeHelper.GetDefault(property); if (IsAttribute || IsText) { Serialazer = TypeHelper.GetValueSerializer(property); } Name = property.Name; }