2012-04-24 13 views
2

私はClientIndexModelについては、次の型階層を持っている:私のフルビューモデルがApiControllerによってシリアル化されていないのはなぜですか?

public class ViewModel 
{ 
    public virtual IDictionary<string, SelectList> SelectListDictionary 
    { 
     get 
     { 
      var props = GetType().GetProperties().Where(p => p.PropertyType == typeof(SelectList)); 
      return props.ToDictionary(prop => prop.Name, prop => (SelectList)prop.GetValue(this, null)); 
     } 
    } 
} 
public class IndexModel<TIndexItem, TEntity> : ViewModel where TIndexItem : ViewModel where TEntity : new() 
{ 
    public List<TIndexItem> Items { get; private set; } 
} 
public class ClientIndexModel: IndexModel<ClientIndexItem, Client> 
{ 
} 

私はインスタンス化し、次のようにApiControllerからClientIndexModelを返す:

public ClientIndexModel Get() 
{ 
    var model = new ClientIndexModel(); 
    return model; 
} 

私はreturn model;行にブレークポイントをmodelを検査した場合、 Itemsプロパティが存在し、カウントは0ですが、このアクションから返されるJSONはSelectListDictionaryプロパティのみを持ち、Itemsプロパティはありません。なぜこれができますか?

答えて

2

Itemsプロパティにはプライベートセッターがあります。プライベートセッターを持つプロパティーは、外部から値を変更できないため逆シリアル化できないため、シリアル化することは意味がないため、シリアル化から意図的に除外されます。したがって、セッターを完全に削除するか(SelectListDictionaryプロパティの場合のように)、パブリックにするか、プライベートセッターでプロパティをシリアライズできるカスタムシリアライザを使用してカスタムフォーマッタを作成する必要があります。

+0

ありがとう、ありがとう。そのセッターは、私のインデックスモデルがすべて厳密に表示のみが強化されていた時代からの逆戻りです。まだそこにいないはずですが、私はそれがシリアル化を停止するとは決して推測できませんでした。 – ProfK

関連する問題