@@ -57,10 +57,12 @@ public partial class MrwSerializationTypeDefinition : TypeProvider
5757 // CSharpType before delayed base model resolution has updated the model's inheritance.
5858 private CSharpType ? _jsonModelTInterfaceValue ;
5959 private CSharpType _jsonModelTInterface => _jsonModelTInterfaceValue ??= new CSharpType ( typeof ( IJsonModel < > ) , SerializationInterfaceType . Type ) ;
60- private CSharpType ? _jsonModelObjectInterface => _isStruct ? ( CSharpType ) typeof ( IJsonModel < object > ) : null ;
60+ private CSharpType ? _jsonModelObjectInterface ;
61+ private CSharpType ? JsonModelObjectInterface => _isStruct ? _jsonModelObjectInterface ??= ( CSharpType ) typeof ( IJsonModel < object > ) : null ;
6162 private CSharpType ? _persistableModelTInterfaceValue ;
6263 private CSharpType _persistableModelTInterface => _persistableModelTInterfaceValue ??= new CSharpType ( typeof ( IPersistableModel < > ) , SerializationInterfaceType . Type ) ;
63- private CSharpType ? _persistableModelObjectInterface => _isStruct ? ( CSharpType ) typeof ( IPersistableModel < object > ) : null ;
64+ private CSharpType ? _persistableModelObjectInterface ;
65+ private CSharpType ? PersistableModelObjectInterface => _isStruct ? _persistableModelObjectInterface ??= ( CSharpType ) typeof ( IPersistableModel < object > ) : null ;
6466 private readonly ModelProvider _model ;
6567 private readonly InputModelType _inputModel ;
6668 private readonly FieldProvider ? _rawDataField ;
@@ -71,8 +73,10 @@ public partial class MrwSerializationTypeDefinition : TypeProvider
7173 private readonly bool _supportsXml ;
7274 private ConstructorProvider ? _serializationConstructor ;
7375 // Flag to determine if the model should override the serialization methods
74- private bool ShouldOverrideMethods => _model . BaseModelProvider != null && ! _isStruct ;
75- private bool ShouldSkipSerializationMethodOverrides => ShouldSkipDerivedSerializationMethodOverrides ( _model . BaseModelProvider ) ;
76+ private bool ? _shouldOverrideMethods ;
77+ private bool ShouldOverrideMethods => _shouldOverrideMethods ??= _model . BaseModelProvider != null && ! _isStruct ;
78+ private bool ? _shouldSkipSerializationMethodOverrides ;
79+ private bool ShouldSkipSerializationMethodOverrides => _shouldSkipSerializationMethodOverrides ??= ShouldSkipDerivedSerializationMethodOverrides ( _model . BaseModelProvider ) ;
7680 private readonly bool _shouldOverrideXmlMethods ;
7781 private readonly Lazy < PropertyProvider [ ] > _additionalProperties ;
7882
@@ -434,17 +438,19 @@ protected override CSharpType[] BuildImplements()
434438 if ( _supportsJson )
435439 {
436440 interfaces . Add ( _jsonModelTInterface ) ;
437- if ( _jsonModelObjectInterface != null )
441+ var jsonModelObjectInterface = JsonModelObjectInterface ;
442+ if ( jsonModelObjectInterface != null )
438443 {
439- interfaces . Add ( _jsonModelObjectInterface ) ;
444+ interfaces . Add ( jsonModelObjectInterface ) ;
440445 }
441446 }
442447 else if ( _supportsXml )
443448 {
444449 interfaces . Add ( _persistableModelTInterface ) ;
445- if ( _persistableModelObjectInterface != null )
450+ var persistableModelObjectInterface = PersistableModelObjectInterface ;
451+ if ( persistableModelObjectInterface != null )
446452 {
447- interfaces . Add ( _persistableModelObjectInterface ) ;
453+ interfaces . Add ( persistableModelObjectInterface ) ;
448454 }
449455 }
450456
@@ -474,7 +480,7 @@ internal MethodProvider BuildJsonModelWriteMethodObjectDeclaration()
474480 var castToT = This . CastTo ( _jsonModelTInterface ) ;
475481 return new MethodProvider
476482 (
477- new MethodSignature ( nameof ( IJsonModel < object > . Write ) , null , MethodSignatureModifiers . None , null , null , [ _utf8JsonWriterParameter , _serializationOptionsParameter ] , ExplicitInterface : _jsonModelObjectInterface ) ,
483+ new MethodSignature ( nameof ( IJsonModel < object > . Write ) , null , MethodSignatureModifiers . None , null , null , [ _utf8JsonWriterParameter , _serializationOptionsParameter ] , ExplicitInterface : JsonModelObjectInterface ) ,
478484 castToT . Invoke ( nameof ( IJsonModel < object > . Write ) , [ _utf8JsonWriterParameter , _serializationOptionsParameter ] ) ,
479485 this
480486 ) ;
@@ -489,7 +495,7 @@ internal MethodProvider BuildJsonModelCreateMethodObjectDeclaration()
489495 var castToT = This . CastTo ( _jsonModelTInterface ) ;
490496 return new MethodProvider
491497 (
492- new MethodSignature ( nameof ( IJsonModel < object > . Create ) , null , MethodSignatureModifiers . None , typeof ( object ) , null , [ _utf8JsonReaderParameter , _serializationOptionsParameter ] , ExplicitInterface : _jsonModelObjectInterface ) ,
498+ new MethodSignature ( nameof ( IJsonModel < object > . Create ) , null , MethodSignatureModifiers . None , typeof ( object ) , null , [ _utf8JsonReaderParameter , _serializationOptionsParameter ] , ExplicitInterface : JsonModelObjectInterface ) ,
493499 castToT . Invoke ( nameof ( IJsonModel < object > . Create ) , [ _utf8JsonReaderParameter . AsArgument ( ) , _serializationOptionsParameter ] ) ,
494500 this
495501 ) ;
@@ -505,7 +511,7 @@ internal MethodProvider BuildPersistableModelWriteMethodObjectDeclaration()
505511 var returnType = typeof ( BinaryData ) ;
506512 return new MethodProvider
507513 (
508- new MethodSignature ( nameof ( IPersistableModel < object > . Write ) , null , MethodSignatureModifiers . None , returnType , null , [ _serializationOptionsParameter ] , ExplicitInterface : _persistableModelObjectInterface ) ,
514+ new MethodSignature ( nameof ( IPersistableModel < object > . Write ) , null , MethodSignatureModifiers . None , returnType , null , [ _serializationOptionsParameter ] , ExplicitInterface : PersistableModelObjectInterface ) ,
509515 castToT . Invoke ( nameof ( IPersistableModel < object > . Write ) , [ _serializationOptionsParameter ] ) ,
510516 this
511517 ) ;
@@ -521,7 +527,7 @@ internal MethodProvider BuildPersistableModelCreateMethodObjectDeclaration()
521527 var returnType = typeof ( object ) ;
522528 return new MethodProvider
523529 (
524- new MethodSignature ( nameof ( IPersistableModel < object > . Create ) , null , MethodSignatureModifiers . None , returnType , null , [ _dataParameter , _serializationOptionsParameter ] , ExplicitInterface : _persistableModelObjectInterface ) ,
530+ new MethodSignature ( nameof ( IPersistableModel < object > . Create ) , null , MethodSignatureModifiers . None , returnType , null , [ _dataParameter , _serializationOptionsParameter ] , ExplicitInterface : PersistableModelObjectInterface ) ,
525531 castToT . Invoke ( nameof ( IPersistableModel < object > . Create ) , [ _dataParameter , _serializationOptionsParameter ] ) ,
526532 this
527533 ) ;
@@ -801,7 +807,7 @@ internal MethodProvider BuildPersistableModelGetFormatFromOptionsObjectDeclarati
801807 // string IPersistableModel<object>.GetFormatFromOptions(ModelReaderWriterOptions options) => ((IPersistableModel<T>)this).GetFormatFromOptions(options);
802808 return new MethodProvider
803809 (
804- new MethodSignature ( nameof ( IPersistableModel < object > . GetFormatFromOptions ) , null , MethodSignatureModifiers . None , typeof ( string ) , null , [ _serializationOptionsParameter ] , ExplicitInterface : _persistableModelObjectInterface ) ,
810+ new MethodSignature ( nameof ( IPersistableModel < object > . GetFormatFromOptions ) , null , MethodSignatureModifiers . None , typeof ( string ) , null , [ _serializationOptionsParameter ] , ExplicitInterface : PersistableModelObjectInterface ) ,
805811 castToT . Invoke ( nameof ( IPersistableModel < object > . GetFormatFromOptions ) , [ _serializationOptionsParameter ] ) ,
806812 this
807813 ) ;
0 commit comments