1
1
using System ;
2
2
using System . Collections ;
3
3
using System . Collections . Generic ;
4
- using System . Net . Http ;
4
+ using System . Reflection ;
5
5
6
6
namespace NetCoreStack . Proxy
7
7
{
@@ -28,14 +28,46 @@ private void SetSimpleEnumerable(string key, Dictionary<string, string> dictiona
28
28
}
29
29
}
30
30
31
- private void TrySetSystemObjectValue ( )
31
+ private void TrySetSystemObjectValue ( string key ,
32
+ PropertyInfo propertyInfo ,
33
+ string propertyName ,
34
+ Type containerType ,
35
+ Dictionary < string , string > dictionary ,
36
+ object value )
32
37
{
38
+ var objModelMetadata = new ProxyModelMetadata ( propertyInfo ,
39
+ ProxyModelMetadataIdentity . ForProperty ( value . GetType ( ) ,
40
+ propertyName ,
41
+ containerType ) ) ;
42
+
43
+
44
+ if ( objModelMetadata . IsSimpleType )
45
+ {
46
+ dictionary . Add ( key , Convert . ToString ( value ) ) ;
47
+ return ;
48
+ }
49
+
50
+ if ( objModelMetadata . IsEnumerableType )
51
+ {
52
+ if ( objModelMetadata . ElementType . IsSimpleType )
53
+ {
54
+ SetSimpleEnumerable ( key , dictionary , value ) ;
55
+ }
56
+ else
57
+ {
58
+ TrySetValueInner ( key , objModelMetadata , dictionary , value ) ;
59
+ }
60
+
61
+ return ;
62
+ }
33
63
64
+ // Anonymous object resolver
65
+ ResolveInternal ( objModelMetadata , dictionary , value , key ) ;
34
66
}
35
67
36
68
private void TrySetValueInner ( string key , ProxyModelMetadata modelMetadata , Dictionary < string , string > dictionary , object value )
37
69
{
38
- var count = modelMetadata . ElementType . Properties . Count ;
70
+ var count = modelMetadata . ElementType . PropertiesCount ;
39
71
var elementProperties = modelMetadata . ElementType . Properties ;
40
72
for ( int i = 0 ; i < count ; i ++ )
41
73
{
@@ -63,6 +95,7 @@ private void TrySetValue(string prefix, ProxyModelMetadata modelMetadata, Dictio
63
95
64
96
if ( modelMetadata . IsNullableValueType )
65
97
{
98
+ // recall with prefix
66
99
TrySetValue ( prefix , modelMetadata . ElementType , dictionary , value ) ;
67
100
return ;
68
101
}
@@ -73,6 +106,11 @@ private void TrySetValue(string prefix, ProxyModelMetadata modelMetadata, Dictio
73
106
return ;
74
107
}
75
108
109
+ if ( modelMetadata . IsFormFile )
110
+ {
111
+ // TODO Gencebay
112
+ }
113
+
76
114
if ( modelMetadata . IsEnumerableType )
77
115
{
78
116
if ( modelMetadata . ElementType . IsSimpleType )
@@ -81,7 +119,11 @@ private void TrySetValue(string prefix, ProxyModelMetadata modelMetadata, Dictio
81
119
}
82
120
else if ( modelMetadata . ElementType . IsSystemObject )
83
121
{
84
-
122
+ TrySetSystemObjectValue ( key ,
123
+ modelMetadata . ElementType . PropertyInfo ,
124
+ modelMetadata . ElementType . PropertyName ,
125
+ modelMetadata . ContainerType ,
126
+ dictionary , value ) ;
85
127
}
86
128
else
87
129
{
@@ -94,52 +136,29 @@ private void TrySetValue(string prefix, ProxyModelMetadata modelMetadata, Dictio
94
136
// If typeof(object)
95
137
if ( modelMetadata . IsSystemObject )
96
138
{
97
- // TODO
98
- // TrySetSystemObjectValue
99
-
100
- var objModelMetadata = new ProxyModelMetadata ( modelMetadata . PropertyInfo ,
101
- ProxyModelMetadataIdentity . ForProperty ( value . GetType ( ) ,
102
- modelMetadata . PropertyName ,
103
- modelMetadata . ContainerType ) ) ;
104
-
105
- if ( objModelMetadata . IsSimpleType )
106
- {
107
- dictionary . Add ( key , Convert . ToString ( value ) ) ;
108
- return ;
109
- }
110
-
111
- if ( objModelMetadata . IsEnumerableType )
112
- {
113
- if ( objModelMetadata . ElementType . IsSimpleType )
114
- {
115
- SetSimpleEnumerable ( key , dictionary , value ) ;
116
- }
117
- else
118
- {
119
- TrySetValueInner ( key , objModelMetadata , dictionary , value ) ;
120
- }
121
- }
139
+ TrySetSystemObjectValue ( key , modelMetadata . PropertyInfo , modelMetadata . PropertyName , modelMetadata . ContainerType , dictionary , value ) ;
122
140
}
123
141
}
124
142
125
143
private void ResolveInternal ( ProxyModelMetadata modelMetadata , Dictionary < string , string > dictionary , object value , string prefix = "" )
126
144
{
127
- var count = modelMetadata . Properties . Count ;
145
+ var count = modelMetadata . PropertiesCount ;
128
146
if ( count == 0 )
129
147
{
130
148
TrySetValue ( prefix , modelMetadata , dictionary , value ) ;
131
149
return ;
132
150
}
133
151
134
- for ( int i = 0 ; i < modelMetadata . Properties . Count ; i ++ )
152
+ for ( int i = 0 ; i < modelMetadata . PropertiesCount ; i ++ )
135
153
{
136
154
var metadata = modelMetadata . Properties [ i ] ;
137
155
if ( metadata . ContainerType != null )
138
156
{
139
157
var parent = prefix ;
140
158
if ( ! metadata . IsSimpleType &&
141
159
! metadata . IsEnumerableType &&
142
- ! metadata . IsNullableValueType )
160
+ ! metadata . IsNullableValueType &&
161
+ ! metadata . IsSystemObject )
143
162
{
144
163
parent = ! string . IsNullOrEmpty ( prefix ) ? $ "{ prefix } .{ metadata . PropertyName } " : metadata . PropertyName ;
145
164
}
@@ -161,10 +180,7 @@ private void ResolveInternal(ProxyModelMetadata modelMetadata, Dictionary<string
161
180
}
162
181
163
182
// Per request parameter context resolver
164
- public ResolvedContentResult Resolve ( HttpMethod httpMethod ,
165
- List < ProxyModelMetadata > parameters ,
166
- bool isMultiPartFormData ,
167
- object [ ] args )
183
+ public ResolvedContentResult Resolve ( List < ProxyModelMetadata > parameters , object [ ] args )
168
184
{
169
185
var dictionary = new Dictionary < string , string > ( StringComparer . Ordinal ) ;
170
186
var count = parameters . Count ;
0 commit comments