@@ -39,24 +39,36 @@ private void TrySetValue(string prefix, ProxyModelMetadata modelMetadata, Dictio
3939
4040 if ( modelMetadata . IsSimpleType )
4141 {
42- if ( modelMetadata . PropertyInfo != null )
43- {
44- dictionary . Add ( key , Convert . ToString ( value ) ) ;
45- return ;
46- }
42+ dictionary . Add ( key , Convert . ToString ( value ) ) ;
43+ return ;
4744 }
4845
4946 if ( modelMetadata . IsEnumerableType )
5047 {
51- if ( modelMetadata . IsElementTypeSimple )
48+ if ( modelMetadata . ElementType . IsSimpleType )
5249 {
5350 SetSimpleEnumerable ( key , dictionary , value ) ;
5451 }
5552 else
5653 {
57- if ( TypeDescriptor . GetConverter ( value . GetType ( ) ) . CanConvertTo ( typeof ( string ) ) )
54+ var count = modelMetadata . ElementType . Properties . Count ;
55+ var elementProperties = modelMetadata . ElementType . Properties ;
56+ for ( int i = 0 ; i < count ; i ++ )
5857 {
59- SetSimpleEnumerable ( key , dictionary , value ) ;
58+ var elementModelMetadata = elementProperties [ i ] ;
59+ var propertyInfo = elementModelMetadata . PropertyInfo ;
60+ var values = value as IEnumerable ;
61+ if ( values != null )
62+ {
63+ var index = 0 ;
64+ foreach ( var v in values )
65+ {
66+ var propKey = $ "{ key } [{ index } ]";
67+ var propValue = propertyInfo ? . GetValue ( v ) ;
68+ ResolveInternal ( elementModelMetadata , dictionary , propValue , propKey ) ;
69+ index ++ ;
70+ }
71+ }
6072 }
6173 }
6274 }
@@ -89,10 +101,13 @@ private void ResolveInternal(ProxyModelMetadata modelMetadata, Dictionary<string
89101 }
90102 }
91103
92- var v = metadata . PropertyInfo . GetValue ( value ) ;
93- if ( v != null )
104+ if ( value != null )
94105 {
95- ResolveInternal ( metadata , dictionary , v , parent ) ;
106+ var v = metadata . PropertyInfo . GetValue ( value ) ;
107+ if ( v != null )
108+ {
109+ ResolveInternal ( metadata , dictionary , v , parent ) ;
110+ }
96111 }
97112 }
98113 else
@@ -103,8 +118,8 @@ private void ResolveInternal(ProxyModelMetadata modelMetadata, Dictionary<string
103118 }
104119
105120 // Per request parameter context resolver
106- public ResolvedContentResult Resolve ( List < ProxyModelMetadata > parameters ,
107- HttpMethod httpMethod ,
121+ public ResolvedContentResult Resolve ( HttpMethod httpMethod ,
122+ List < ProxyModelMetadata > parameters ,
108123 bool isMultiPartFormData ,
109124 object [ ] args )
110125 {
@@ -117,30 +132,6 @@ public ResolvedContentResult Resolve(List<ProxyModelMetadata> parameters,
117132 ResolveInternal ( modelMetadata , dictionary , args [ i ] ) ;
118133 }
119134
120- if ( httpMethod == HttpMethod . Get )
121- {
122- // Ref type parameter resolver
123- if ( parameters . Count == 1 && parameters [ 0 ] . IsReferenceType )
124- {
125- var modelMetadata = MetadataProvider . GetMetadataForType ( args [ 0 ] . GetType ( ) ) ;
126-
127- var obj = args [ 0 ] . ToDictionary ( ) ;
128-
129- // TODO Gencebay
130- // values.Merge(obj, true);
131- // return values;
132- }
133-
134- if ( parameters . Count > 1 && parameters . Any ( x => x . IsReferenceType ) )
135- {
136- throw new ArgumentOutOfRangeException ( $ "Methods marked with HTTP GET can take only one reference type parameter at the same time.") ;
137- }
138- }
139-
140- // TODO Gencebay
141- // values.MergeArgs(args, parameters, isMultiPartFormData);
142- // return values;
143-
144135 return new ResolvedContentResult ( dictionary ) ;
145136 }
146137 }
0 commit comments