From 20cabe23b10ed9c946b840e6677412be5e50e1b9 Mon Sep 17 00:00:00 2001 From: Michael Ganss Date: Tue, 10 Oct 2017 18:10:11 +0200 Subject: [PATCH] Fix #41 --- XmlSchemaClassGenerator/TypeModel.cs | 32 ++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/XmlSchemaClassGenerator/TypeModel.cs b/XmlSchemaClassGenerator/TypeModel.cs index 4a21e580..310aedd5 100644 --- a/XmlSchemaClassGenerator/TypeModel.cs +++ b/XmlSchemaClassGenerator/TypeModel.cs @@ -548,6 +548,17 @@ private bool IsNullableValueType } } + private bool IsNillableValueType + { + get + { + return IsNillable + && !IsNullableValueType + && !(IsCollection || IsArray) + && ((PropertyType is EnumModel) || (PropertyType is SimpleModel && ((SimpleModel)PropertyType).ValueType.IsValueType)); + } + } + private CodeTypeReference TypeReference { get { return PropertyType.GetReferenceFor(OwningType.Namespace, IsCollection || IsArray); } @@ -640,7 +651,16 @@ public void AddMembersTo(CodeTypeDeclaration typeDeclaration, bool withDataBindi if (DefaultValue == null) { var propertyName = isNullableValueType && Configuration.GenerateNullables ? Name + "Value" : Name; - member = new CodeMemberField(typeReference, propertyName); + + if (IsNillableValueType) + { + var nullableType = new CodeTypeReference(typeof(Nullable<>), Configuration.CodeTypeReferenceOptions); + nullableType.TypeArguments.Add(typeReference); + member = new CodeMemberField(nullableType, propertyName); + } + else + member = new CodeMemberField(typeReference, propertyName); + var isPrivateSetter = IsCollection || isArray; if (requiresBackingField) { @@ -659,7 +679,15 @@ public void AddMembersTo(CodeTypeDeclaration typeDeclaration, bool withDataBindi var defaultValueExpression = propertyType.GetDefaultValueFor(DefaultValue); backingField.InitExpression = defaultValueExpression; - member = new CodeMemberField(typeReference, Name); + if (IsNillableValueType) + { + var nullableType = new CodeTypeReference(typeof(Nullable<>), Configuration.CodeTypeReferenceOptions); + nullableType.TypeArguments.Add(typeReference); + member = new CodeMemberField(nullableType, Name); + } + else + member = new CodeMemberField(typeReference, Name); + member.Name += GetAccessors(member.Name, backingField.Name, propertyType.GetPropertyValueTypeCode(), false, withDataBinding); if (IsNullable)