Skip to content

Commit 20cabe2

Browse files
author
Michael Ganss
committed
Fix #41
1 parent 43315e4 commit 20cabe2

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

XmlSchemaClassGenerator/TypeModel.cs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,17 @@ private bool IsNullableValueType
548548
}
549549
}
550550

551+
private bool IsNillableValueType
552+
{
553+
get
554+
{
555+
return IsNillable
556+
&& !IsNullableValueType
557+
&& !(IsCollection || IsArray)
558+
&& ((PropertyType is EnumModel) || (PropertyType is SimpleModel && ((SimpleModel)PropertyType).ValueType.IsValueType));
559+
}
560+
}
561+
551562
private CodeTypeReference TypeReference
552563
{
553564
get { return PropertyType.GetReferenceFor(OwningType.Namespace, IsCollection || IsArray); }
@@ -640,7 +651,16 @@ public void AddMembersTo(CodeTypeDeclaration typeDeclaration, bool withDataBindi
640651
if (DefaultValue == null)
641652
{
642653
var propertyName = isNullableValueType && Configuration.GenerateNullables ? Name + "Value" : Name;
643-
member = new CodeMemberField(typeReference, propertyName);
654+
655+
if (IsNillableValueType)
656+
{
657+
var nullableType = new CodeTypeReference(typeof(Nullable<>), Configuration.CodeTypeReferenceOptions);
658+
nullableType.TypeArguments.Add(typeReference);
659+
member = new CodeMemberField(nullableType, propertyName);
660+
}
661+
else
662+
member = new CodeMemberField(typeReference, propertyName);
663+
644664
var isPrivateSetter = IsCollection || isArray;
645665
if (requiresBackingField)
646666
{
@@ -659,7 +679,15 @@ public void AddMembersTo(CodeTypeDeclaration typeDeclaration, bool withDataBindi
659679
var defaultValueExpression = propertyType.GetDefaultValueFor(DefaultValue);
660680
backingField.InitExpression = defaultValueExpression;
661681

662-
member = new CodeMemberField(typeReference, Name);
682+
if (IsNillableValueType)
683+
{
684+
var nullableType = new CodeTypeReference(typeof(Nullable<>), Configuration.CodeTypeReferenceOptions);
685+
nullableType.TypeArguments.Add(typeReference);
686+
member = new CodeMemberField(nullableType, Name);
687+
}
688+
else
689+
member = new CodeMemberField(typeReference, Name);
690+
663691
member.Name += GetAccessors(member.Name, backingField.Name, propertyType.GetPropertyValueTypeCode(), false, withDataBinding);
664692

665693
if (IsNullable)

0 commit comments

Comments
 (0)