@@ -18,18 +18,12 @@ namespace Microsoft.OpenApi.Reader
1818    internal  class  MapNode  :  ParseNode ,  IEnumerable < PropertyNode > 
1919    { 
2020        private  readonly  JsonObject  _node ; 
21-         private  Dictionary < string ,  PropertyNode > ?  _nodes ; 
2221
23-         private  void   EnsureNodesIsInitialized ( ) 
22+         private  PropertyNode   GetPropertyNodeFromJsonNode ( string   key ,   JsonNode ?   node ) 
2423		{ 
25- 			if  ( _nodes  is  null ) 
26- 			{ 
27-                 _nodes  =  _node . Where ( p =>  p . Value  is  not null ) . OfType < KeyValuePair < string ,  JsonNode > > ( ) . ToDictionary ( p =>  p . Key ,  p =>  new  PropertyNode ( Context ,  p . Key ,  p . Value ) ,  StringComparer . Ordinal ) ; 
28-                 if  ( _node . Where ( p =>  p . Value  is  null ) . ToArray ( )  is  {  Length :  >  0  }  nullNodes ) 
29- 				{ 
30- 					_nodes . AddRange ( nullNodes . Select ( p =>  new  KeyValuePair < string ,  PropertyNode > ( p . Key ,  new  PropertyNode ( Context ,  p . Key ,  JsonNullSentinel . JsonNull ) ) ) ) ; 
31- 				} 
32- 			} 
24+             return  node  is  null  ? 
25+                 new  PropertyNode ( Context ,  key ,  JsonNullSentinel . JsonNull )  : 
26+                 new  PropertyNode ( Context ,  key ,  node ) ; 
3327		} 
3428
3529        public  MapNode ( ParsingContext  context ,  JsonNode  node )  :  base ( 
@@ -47,14 +41,10 @@ public PropertyNode? this[string key]
4741        { 
4842            get 
4943            { 
50-                 if  ( _node . ContainsKey ( key ) ) 
51-                 { 
52-                     EnsureNodesIsInitialized ( ) ; 
53-                     if  ( _nodes ! . TryGetValue ( key ,  out  var  propertyNode ) ) 
54-                     { 
55-                         return  propertyNode ; 
56-                     } 
57-                 } 
44+                 if  ( _node . TryGetPropertyValue ( key ,  out  var  value ) ) 
45+ 				{ 
46+ 					return  GetPropertyNodeFromJsonNode ( key ,  value ) ; 
47+ 				} 
5848
5949                return  null ; 
6050            } 
@@ -142,10 +132,11 @@ public override Dictionary<string, HashSet<T>> CreateArrayMap<T>(Func<ValueNode,
142132            return  nodes . ToDictionary ( kvp =>  kvp . key ,  kvp =>  kvp . values ) ; 
143133        } 
144134
135+         private  List < PropertyNode > ?  _nodes ; 
145136        public  IEnumerator < PropertyNode >  GetEnumerator ( ) 
146137        { 
147-             EnsureNodesIsInitialized ( ) ; 
148-             return  _nodes ! . Values . GetEnumerator ( ) ; 
138+             _nodes   ??=   _node . Select ( p  =>   GetPropertyNodeFromJsonNode ( p . Key ,   p . Value ) ) . ToList ( ) ; 
139+             return  _nodes . GetEnumerator ( ) ; 
149140        } 
150141
151142        IEnumerator  IEnumerable . GetEnumerator ( ) 
0 commit comments