Skip to content

Commit 790a656

Browse files
author
Michael Ganss
committed
Fix #45
1 parent 20cabe2 commit 790a656

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

XmlSchemaClassGenerator/TypeModel.cs

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ public static IEnumerable<CodeCommentStatement> GetComments(IEnumerable<Document
8787

8888
public abstract class TypeModel
8989
{
90+
protected static readonly CodeDomProvider CSharpProvider = CodeDomProvider.CreateProvider("CSharp");
91+
9092
public NamespaceModel Namespace { get; set; }
9193
public XmlQualifiedName RootElementName { get; set; }
9294
public string Name { get; set; }
@@ -401,6 +403,31 @@ public List<ClassModel> GetAllDerivedTypes()
401403

402404
return allDerivedTypes;
403405
}
406+
407+
public override CodeExpression GetDefaultValueFor(string defaultString)
408+
{
409+
if (BaseClass is SimpleModel)
410+
{
411+
string reference, val;
412+
413+
using (var writer = new System.IO.StringWriter())
414+
{
415+
CSharpProvider.GenerateCodeFromExpression(BaseClass.GetDefaultValueFor(defaultString), writer, new CodeGeneratorOptions());
416+
val = writer.ToString();
417+
}
418+
419+
using (var writer = new System.IO.StringWriter())
420+
{
421+
CSharpProvider.GenerateCodeFromExpression(new CodeTypeReferenceExpression(GetReferenceFor(null, false)), writer, new CodeGeneratorOptions());
422+
reference = writer.ToString();
423+
}
424+
425+
var dv = new CodeSnippetExpression($"new { reference } {{ { Configuration.TextValuePropertyName } = { val } }};");
426+
return dv;
427+
}
428+
429+
return base.GetDefaultValueFor(defaultString);
430+
}
404431
}
405432

406433
public class PropertyModel
@@ -609,7 +636,7 @@ public void AddInterfaceMembersTo(CodeTypeDeclaration typeDeclaration)
609636
{
610637
var defaultValueExpression = propertyType.GetDefaultValueFor(DefaultValue);
611638

612-
if (!(defaultValueExpression is CodeObjectCreateExpression))
639+
if ((defaultValueExpression is CodePrimitiveExpression) || (defaultValueExpression is CodeFieldReferenceExpression))
613640
{
614641
var defaultValueAttribute = new CodeAttributeDeclaration(new CodeTypeReference(typeof(DefaultValueAttribute), Configuration.CodeTypeReferenceOptions),
615642
new CodeAttributeArgument(defaultValueExpression));
@@ -692,7 +719,7 @@ public void AddMembersTo(CodeTypeDeclaration typeDeclaration, bool withDataBindi
692719

693720
if (IsNullable)
694721
{
695-
if (!(defaultValueExpression is CodeObjectCreateExpression))
722+
if ((defaultValueExpression is CodePrimitiveExpression) || (defaultValueExpression is CodeFieldReferenceExpression))
696723
{
697724
var defaultValueAttribute = new CodeAttributeDeclaration(new CodeTypeReference(typeof(DefaultValueAttribute), Configuration.CodeTypeReferenceOptions),
698725
new CodeAttributeArgument(defaultValueExpression));
@@ -1064,8 +1091,6 @@ public override CodeExpression GetDefaultValueFor(string defaultString)
10641091

10651092
public class SimpleModel : TypeModel
10661093
{
1067-
private static readonly CodeDomProvider CSharpProvider = CodeDomProvider.CreateProvider("CSharp");
1068-
10691094
public Type ValueType { get; set; }
10701095
public List<RestrictionModel> Restrictions { get; private set; }
10711096
public bool UseDataTypeAttribute { get; set; }

0 commit comments

Comments
 (0)