@@ -39,24 +39,36 @@ private void TrySetValue(string prefix, ProxyModelMetadata modelMetadata, Dictio
39
39
40
40
if ( modelMetadata . IsSimpleType )
41
41
{
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 ;
47
44
}
48
45
49
46
if ( modelMetadata . IsEnumerableType )
50
47
{
51
- if ( modelMetadata . IsElementTypeSimple )
48
+ if ( modelMetadata . ElementType . IsSimpleType )
52
49
{
53
50
SetSimpleEnumerable ( key , dictionary , value ) ;
54
51
}
55
52
else
56
53
{
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 ++ )
58
57
{
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
+ }
60
72
}
61
73
}
62
74
}
@@ -89,10 +101,13 @@ private void ResolveInternal(ProxyModelMetadata modelMetadata, Dictionary<string
89
101
}
90
102
}
91
103
92
- var v = metadata . PropertyInfo . GetValue ( value ) ;
93
- if ( v != null )
104
+ if ( value != null )
94
105
{
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
+ }
96
111
}
97
112
}
98
113
else
@@ -103,8 +118,8 @@ private void ResolveInternal(ProxyModelMetadata modelMetadata, Dictionary<string
103
118
}
104
119
105
120
// 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 ,
108
123
bool isMultiPartFormData ,
109
124
object [ ] args )
110
125
{
@@ -117,30 +132,6 @@ public ResolvedContentResult Resolve(List<ProxyModelMetadata> parameters,
117
132
ResolveInternal ( modelMetadata , dictionary , args [ i ] ) ;
118
133
}
119
134
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
-
144
135
return new ResolvedContentResult ( dictionary ) ;
145
136
}
146
137
}
0 commit comments