@@ -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