@@ -65,33 +65,45 @@ private static XElement CreateElementFromNode(BaseNode node, ILogger logger)
6565 Contract . Requires ( node != null ) ;
6666 Contract . Requires ( logger != null ) ;
6767
68- var converter = CustomNodeSerializer . GetWriteConverter ( node ) ;
69- if ( converter != null )
68+ XElement CreateElement ( )
7069 {
71- return converter . CreateElementFromNode ( node , logger , CreateElementFromNode ) ;
70+ var converter = CustomNodeSerializer . GetWriteConverter ( node ) ;
71+ if ( converter != null )
72+ {
73+ return converter . CreateElementFromNode ( node , logger , CreateElementFromNode ) ;
74+ }
75+
76+ if ( ! buildInTypeToStringMap . TryGetValue ( node . GetType ( ) , out var typeString ) )
77+ {
78+ logger . Log ( LogLevel . Error , $ "Skipping node with unknown type: { node . Name } ") ;
79+ logger . Log ( LogLevel . Warning , node . GetType ( ) . ToString ( ) ) ;
80+
81+ return null ;
82+ }
83+
84+ return new XElement (
85+ XmlNodeElement ,
86+ new XAttribute ( XmlTypeAttribute , typeString )
87+ ) ;
7288 }
7389
74- if ( ! buildInTypeToStringMap . TryGetValue ( node . GetType ( ) , out var typeString ) )
90+ var element = CreateElement ( ) ;
91+ if ( element == null )
7592 {
76- logger . Log ( LogLevel . Error , $ "Skipping node with unknown type: { node . Name } ") ;
77- logger . Log ( LogLevel . Warning , node . GetType ( ) . ToString ( ) ) ;
93+ logger . Log ( LogLevel . Error , "Could not create element." ) ;
7894
7995 return null ;
8096 }
8197
82- var element = new XElement (
83- XmlNodeElement ,
84- new XAttribute ( XmlNameAttribute , node . Name ?? string . Empty ) ,
85- new XAttribute ( XmlCommentAttribute , node . Comment ?? string . Empty ) ,
86- new XAttribute ( XmlHiddenAttribute , node . IsHidden . ToString ( ) ) ,
87- new XAttribute ( XmlTypeAttribute , typeString )
88- ) ;
98+ element . SetAttributeValue ( XmlNameAttribute , node . Name ?? string . Empty ) ;
99+ element . SetAttributeValue ( XmlCommentAttribute , node . Comment ?? string . Empty ) ;
100+ element . SetAttributeValue ( XmlHiddenAttribute , node . IsHidden . ToString ( ) ) ;
89101
90102 if ( node is BaseWrapperNode wrapperNode )
91103 {
92- if ( node is ClassInstanceNode classInstanceNode )
104+ if ( node is BaseClassWrapperNode classWrapperNode )
93105 {
94- element . SetAttributeValue ( XmlReferenceAttribute , ( ( ClassNode ) classInstanceNode . InnerNode ) . Uuid . ToBase64String ( ) ) ;
106+ element . SetAttributeValue ( XmlReferenceAttribute , ( ( ClassNode ) classWrapperNode . InnerNode ) . Uuid . ToBase64String ( ) ) ;
95107 }
96108 else if ( wrapperNode . InnerNode != null )
97109 {
0 commit comments