internal FieldModel(MemberInfo memberInfo, Type fieldType, TypeDesc fieldTypeDesc) { this.name = memberInfo.Name; this.fieldType = fieldType; this.fieldTypeDesc = fieldTypeDesc; this.memberInfo = memberInfo; this.checkShouldPersistMethodInfo = memberInfo.DeclaringType.GetMethod("ShouldSerialize" + memberInfo.Name, new Type[0]); this.checkShouldPersist = this.checkShouldPersistMethodInfo != null; FieldInfo specifiedField = memberInfo.DeclaringType.GetField(memberInfo.Name + "Specified"); if (specifiedField != null) { if (specifiedField.FieldType != typeof(bool)) { throw new InvalidOperationException(Res.GetString(Res.XmlInvalidSpecifiedType, specifiedField.Name, specifiedField.FieldType.FullName, typeof(bool).FullName)); } this.checkSpecified = specifiedField.IsInitOnly ? SpecifiedAccessor.ReadOnly : SpecifiedAccessor.ReadWrite; this.checkSpecifiedMemberInfo = specifiedField; } else { PropertyInfo specifiedProperty = memberInfo.DeclaringType.GetProperty(memberInfo.Name + "Specified"); if (specifiedProperty != null) { if (StructModel.CheckPropertyRead(specifiedProperty)) { this.checkSpecified = specifiedProperty.CanWrite ? SpecifiedAccessor.ReadWrite : SpecifiedAccessor.ReadOnly; this.checkSpecifiedMemberInfo = specifiedProperty; } if (this.checkSpecified != SpecifiedAccessor.None && specifiedProperty.PropertyType != typeof(bool)) { throw new InvalidOperationException(Res.GetString(Res.XmlInvalidSpecifiedType, specifiedProperty.Name, specifiedProperty.PropertyType.FullName, typeof(bool).FullName)); } } } if (memberInfo is PropertyInfo) { readOnly = !((PropertyInfo)memberInfo).CanWrite; isProperty = true; } else if (memberInfo is FieldInfo) { readOnly = ((FieldInfo)memberInfo).IsInitOnly; } }
internal FieldModel(MemberInfo memberInfo, Type fieldType, TypeDesc fieldTypeDesc) { _name = memberInfo.Name; _fieldType = fieldType; _fieldTypeDesc = fieldTypeDesc; _memberInfo = memberInfo; _checkShouldPersistMethodInfo = memberInfo.DeclaringType !.GetMethod($"ShouldSerialize{memberInfo.Name}", Type.EmptyTypes); _checkShouldPersist = _checkShouldPersistMethodInfo != null; FieldInfo?specifiedField = memberInfo.DeclaringType.GetField($"{memberInfo.Name}Specified"); if (specifiedField != null) { if (specifiedField.FieldType != typeof(bool)) { throw new InvalidOperationException(SR.Format(SR.XmlInvalidSpecifiedType, specifiedField.Name, specifiedField.FieldType.FullName, typeof(bool).FullName)); } _checkSpecified = specifiedField.IsInitOnly ? SpecifiedAccessor.ReadOnly : SpecifiedAccessor.ReadWrite; _checkSpecifiedMemberInfo = specifiedField; } else { PropertyInfo?specifiedProperty = memberInfo.DeclaringType.GetProperty($"{memberInfo.Name}Specified"); if (specifiedProperty != null) { if (StructModel.CheckPropertyRead(specifiedProperty)) { _checkSpecified = specifiedProperty.CanWrite ? SpecifiedAccessor.ReadWrite : SpecifiedAccessor.ReadOnly; _checkSpecifiedMemberInfo = specifiedProperty; } if (_checkSpecified != SpecifiedAccessor.None && specifiedProperty.PropertyType != typeof(bool)) { throw new InvalidOperationException(SR.Format(SR.XmlInvalidSpecifiedType, specifiedProperty.Name, specifiedProperty.PropertyType.FullName, typeof(bool).FullName)); } } } if (memberInfo is PropertyInfo) { _readOnly = !((PropertyInfo)memberInfo).CanWrite; _isProperty = true; } else if (memberInfo is FieldInfo) { _readOnly = ((FieldInfo)memberInfo).IsInitOnly; } }
internal FieldModel(MemberInfo memberInfo, Type fieldType, TypeDesc fieldTypeDesc) { this.name = memberInfo.Name; this.fieldType = fieldType; this.fieldTypeDesc = fieldTypeDesc; this.checkShouldPersist = memberInfo.DeclaringType.GetMethod("ShouldSerialize" + memberInfo.Name, new Type[0]) != null; FieldInfo field = memberInfo.DeclaringType.GetField(memberInfo.Name + "Specified"); if (field != null) { if (field.FieldType != typeof(bool)) { throw new InvalidOperationException(Res.GetString("XmlInvalidSpecifiedType", new object[] { field.Name, field.FieldType.FullName, typeof(bool).FullName })); } this.checkSpecified = field.IsInitOnly ? SpecifiedAccessor.ReadOnly : SpecifiedAccessor.ReadWrite; } else { PropertyInfo property = memberInfo.DeclaringType.GetProperty(memberInfo.Name + "Specified"); if (property != null) { if (StructModel.CheckPropertyRead(property)) { this.checkSpecified = property.CanWrite ? SpecifiedAccessor.ReadWrite : SpecifiedAccessor.ReadOnly; } if ((this.checkSpecified != SpecifiedAccessor.None) && (property.PropertyType != typeof(bool))) { throw new InvalidOperationException(Res.GetString("XmlInvalidSpecifiedType", new object[] { property.Name, property.PropertyType.FullName, typeof(bool).FullName })); } } } if (memberInfo is PropertyInfo) { this.readOnly = !((PropertyInfo)memberInfo).CanWrite; this.isProperty = true; } else if (memberInfo is FieldInfo) { this.readOnly = ((FieldInfo)memberInfo).IsInitOnly; } }