2017-12-16 15 views
0

2つの基本クラスが検索条件に1つと検索結果に1つあります。 私は両方のUserオブジェクトバージョンの2つの派生クラスも持っています。JsonResultに渡すと派生型の基本仮想プロパティをオーバーライドする

コントローラアクションにブレークポイントを設定すると、すべてのプロパティがハードコードされているのがわかります。

このアクションをブラウザで直接呼び出すと、派生したオブジェクトの各プロパティがnullになります。

私はを推測しています。JSONシリアライゼーションでは、基本クラスと派生クラスとの違いを判断できません。

これを解決する方法はありますか?

public class BaseSearchCriteria 
{ 
    public int Page { get; set; } 
    public int RecordsPerPage { get; set; } 
} 

public class BaseSearchResults 
{ 
    public int TotalResults { get; set; } 
    public virtual BaseSearchCriteria SearchCriteria { get; set; } 
} 

public class UserSearchCriteria : BaseSearchCriteria 
{ 
    public string Username { get; set; } 
} 

public class UserSearchResults : BaseSearchResults 
{ 
    public new UserSearchCriteria SearchCriteria { get; set; } 
} 


public JsonResult Search(UserSearchCriteria model) 
{ 
    var viewModel = new UserSearchResults 
    { 
     SearchCriteria = new UserSearchCriteria 
     { 
      Page = 1, 
      RecordsPerPage = 15 
     } 
    }; 

    viewModel.TotalResults = 100; 

    return Json(viewModel, JsonRequestBehavior.AllowGet); 
} 
+0

'new'で隠れるのを避けてください。ジェネリック医薬品はこれと一緒に行く方法だろう。 –

+0

@ DanielA.White例を教えてください。 – user3953989

答えて

0

たぶん、それに対処するための良い方法はダニエルA.ホワイト提案としてジェネリックを使用することです。

サンプル要旨here

関連する問題