@@ -182,7 +182,7 @@ public async Task Serialize_Ok()
182182 IsTriggerByPagination = true ,
183183 IsPage = true ,
184184 IsVirtualScroll = true ,
185- SearchModel = new { Name = "Test1" , Count = 2 }
185+ SearchModel = new Foo { Name = "Test1" , Count = 2 }
186186 } ;
187187
188188 model . Filters . Add ( cut . Instance ) ;
@@ -196,6 +196,11 @@ public async Task Serialize_Ok()
196196 var expected = JsonSerializer . Deserialize < QueryPageOptions > ( payload ) ;
197197 Assert . NotNull ( expected ) ;
198198 Assert . Equal ( "SearchText" , expected . SearchText ) ;
199+
200+ var foo = expected . SearchModel as Foo ;
201+ Assert . NotNull ( foo ) ;
202+ Assert . Equal ( "Test1" , foo . Name ) ;
203+
199204 Assert . Equal ( "Name1" , expected . SortName ) ;
200205 Assert . Equal ( 3 , expected . StartIndex ) ;
201206 Assert . Equal ( 4 , expected . PageIndex ) ;
@@ -216,6 +221,73 @@ public async Task Serialize_Ok()
216221 Assert . Equal ( 2 , expected . AdvancedSortList . Count ) ;
217222 }
218223
224+ [ Fact ]
225+ public void SearchModel_Serialize ( )
226+ {
227+ var model = new QueryPageOptions
228+ {
229+ SearchModel = new { Name = "Test1" , Count = 2 }
230+ } ;
231+ var payload = JsonSerializer . Serialize ( model ) ;
232+ var expected = JsonSerializer . Deserialize < QueryPageOptions > ( payload ) ;
233+
234+ Assert . NotNull ( expected ) ;
235+ Assert . NotNull ( expected . SearchModel ) ;
236+ }
237+
238+ [ Fact ]
239+ public void SearchModel_Serialize_TableSearchModel ( )
240+ {
241+ var model = new QueryPageOptions
242+ {
243+ SearchModel = new FooSearchModel { Name = "Test1" }
244+ } ;
245+ var payload = JsonSerializer . Serialize ( model ) ;
246+ var expected = JsonSerializer . Deserialize < QueryPageOptions > ( payload ) ;
247+
248+ Assert . NotNull ( expected ) ;
249+ Assert . NotNull ( expected . SearchModel ) ;
250+ Assert . Equal ( "FooSearchModel" , expected . SearchModel . GetType ( ) . Name ) ;
251+ }
252+
253+ [ Fact ]
254+ public void SearchModel_Serialize_NullType ( )
255+ {
256+ var model = new QueryPageOptions
257+ {
258+ SearchModel = new FooSearchModel { Name = "Test1" }
259+ } ;
260+ var payload = JsonSerializer . Serialize ( model ) ;
261+
262+ // 更改为错误的类型
263+ payload = payload . Replace ( "FooSearchModel" , "FooSearchModel1" ) ;
264+ var expected = JsonSerializer . Deserialize < QueryPageOptions > ( payload ) ;
265+
266+ Assert . NotNull ( expected ) ;
267+ Assert . NotNull ( expected . SearchModel ) ;
268+ Assert . Equal ( "JsonElement" , expected . SearchModel . GetType ( ) . Name ) ;
269+ }
270+
271+ private class FooSearchModel : ITableSearchModel
272+ {
273+ public string ? Name { get ; set ; }
274+
275+ public IEnumerable < IFilterAction > GetSearches ( )
276+ {
277+ var ret = new List < IFilterAction > ( ) ;
278+ if ( ! string . IsNullOrEmpty ( Name ) )
279+ {
280+ ret . Add ( new SearchFilterAction ( nameof ( Foo . Name ) , Name ) ) ;
281+ }
282+ return ret ;
283+ }
284+
285+ public void Reset ( )
286+ {
287+ Name = null ;
288+ }
289+ }
290+
219291 [ Fact ]
220292 public void SerializeFilterAction_Ok ( )
221293 {
0 commit comments