@@ -87,6 +87,8 @@ public static IEnumerable<CodeCommentStatement> GetComments(IEnumerable<Document
87
87
88
88
public abstract class TypeModel
89
89
{
90
+ protected static readonly CodeDomProvider CSharpProvider = CodeDomProvider . CreateProvider ( "CSharp" ) ;
91
+
90
92
public NamespaceModel Namespace { get ; set ; }
91
93
public XmlQualifiedName RootElementName { get ; set ; }
92
94
public string Name { get ; set ; }
@@ -401,6 +403,31 @@ public List<ClassModel> GetAllDerivedTypes()
401
403
402
404
return allDerivedTypes ;
403
405
}
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
+ }
404
431
}
405
432
406
433
public class PropertyModel
@@ -609,7 +636,7 @@ public void AddInterfaceMembersTo(CodeTypeDeclaration typeDeclaration)
609
636
{
610
637
var defaultValueExpression = propertyType . GetDefaultValueFor ( DefaultValue ) ;
611
638
612
- if ( ! ( defaultValueExpression is CodeObjectCreateExpression ) )
639
+ if ( ( defaultValueExpression is CodePrimitiveExpression ) || ( defaultValueExpression is CodeFieldReferenceExpression ) )
613
640
{
614
641
var defaultValueAttribute = new CodeAttributeDeclaration ( new CodeTypeReference ( typeof ( DefaultValueAttribute ) , Configuration . CodeTypeReferenceOptions ) ,
615
642
new CodeAttributeArgument ( defaultValueExpression ) ) ;
@@ -692,7 +719,7 @@ public void AddMembersTo(CodeTypeDeclaration typeDeclaration, bool withDataBindi
692
719
693
720
if ( IsNullable )
694
721
{
695
- if ( ! ( defaultValueExpression is CodeObjectCreateExpression ) )
722
+ if ( ( defaultValueExpression is CodePrimitiveExpression ) || ( defaultValueExpression is CodeFieldReferenceExpression ) )
696
723
{
697
724
var defaultValueAttribute = new CodeAttributeDeclaration ( new CodeTypeReference ( typeof ( DefaultValueAttribute ) , Configuration . CodeTypeReferenceOptions ) ,
698
725
new CodeAttributeArgument ( defaultValueExpression ) ) ;
@@ -1064,8 +1091,6 @@ public override CodeExpression GetDefaultValueFor(string defaultString)
1064
1091
1065
1092
public class SimpleModel : TypeModel
1066
1093
{
1067
- private static readonly CodeDomProvider CSharpProvider = CodeDomProvider . CreateProvider ( "CSharp" ) ;
1068
-
1069
1094
public Type ValueType { get ; set ; }
1070
1095
public List < RestrictionModel > Restrictions { get ; private set ; }
1071
1096
public bool UseDataTypeAttribute { get ; set ; }
0 commit comments