11using System ;
22using System . Collections ;
33using System . Collections . Generic ;
4- using System . Net . Http ;
4+ using System . Reflection ;
55
66namespace NetCoreStack . Proxy
77{
@@ -28,14 +28,46 @@ private void SetSimpleEnumerable(string key, Dictionary<string, string> dictiona
2828 }
2929 }
3030
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 )
3237 {
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+ }
3363
64+ // Anonymous object resolver
65+ ResolveInternal ( objModelMetadata , dictionary , value , key ) ;
3466 }
3567
3668 private void TrySetValueInner ( string key , ProxyModelMetadata modelMetadata , Dictionary < string , string > dictionary , object value )
3769 {
38- var count = modelMetadata . ElementType . Properties . Count ;
70+ var count = modelMetadata . ElementType . PropertiesCount ;
3971 var elementProperties = modelMetadata . ElementType . Properties ;
4072 for ( int i = 0 ; i < count ; i ++ )
4173 {
@@ -63,6 +95,7 @@ private void TrySetValue(string prefix, ProxyModelMetadata modelMetadata, Dictio
6395
6496 if ( modelMetadata . IsNullableValueType )
6597 {
98+ // recall with prefix
6699 TrySetValue ( prefix , modelMetadata . ElementType , dictionary , value ) ;
67100 return ;
68101 }
@@ -73,6 +106,11 @@ private void TrySetValue(string prefix, ProxyModelMetadata modelMetadata, Dictio
73106 return ;
74107 }
75108
109+ if ( modelMetadata . IsFormFile )
110+ {
111+ // TODO Gencebay
112+ }
113+
76114 if ( modelMetadata . IsEnumerableType )
77115 {
78116 if ( modelMetadata . ElementType . IsSimpleType )
@@ -81,7 +119,11 @@ private void TrySetValue(string prefix, ProxyModelMetadata modelMetadata, Dictio
81119 }
82120 else if ( modelMetadata . ElementType . IsSystemObject )
83121 {
84-
122+ TrySetSystemObjectValue ( key ,
123+ modelMetadata . ElementType . PropertyInfo ,
124+ modelMetadata . ElementType . PropertyName ,
125+ modelMetadata . ContainerType ,
126+ dictionary , value ) ;
85127 }
86128 else
87129 {
@@ -94,52 +136,29 @@ private void TrySetValue(string prefix, ProxyModelMetadata modelMetadata, Dictio
94136 // If typeof(object)
95137 if ( modelMetadata . IsSystemObject )
96138 {
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 ) ;
122140 }
123141 }
124142
125143 private void ResolveInternal ( ProxyModelMetadata modelMetadata , Dictionary < string , string > dictionary , object value , string prefix = "" )
126144 {
127- var count = modelMetadata . Properties . Count ;
145+ var count = modelMetadata . PropertiesCount ;
128146 if ( count == 0 )
129147 {
130148 TrySetValue ( prefix , modelMetadata , dictionary , value ) ;
131149 return ;
132150 }
133151
134- for ( int i = 0 ; i < modelMetadata . Properties . Count ; i ++ )
152+ for ( int i = 0 ; i < modelMetadata . PropertiesCount ; i ++ )
135153 {
136154 var metadata = modelMetadata . Properties [ i ] ;
137155 if ( metadata . ContainerType != null )
138156 {
139157 var parent = prefix ;
140158 if ( ! metadata . IsSimpleType &&
141159 ! metadata . IsEnumerableType &&
142- ! metadata . IsNullableValueType )
160+ ! metadata . IsNullableValueType &&
161+ ! metadata . IsSystemObject )
143162 {
144163 parent = ! string . IsNullOrEmpty ( prefix ) ? $ "{ prefix } .{ metadata . PropertyName } " : metadata . PropertyName ;
145164 }
@@ -161,10 +180,7 @@ private void ResolveInternal(ProxyModelMetadata modelMetadata, Dictionary<string
161180 }
162181
163182 // 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 )
168184 {
169185 var dictionary = new Dictionary < string , string > ( StringComparer . Ordinal ) ;
170186 var count = parameters . Count ;
0 commit comments