2017-02-10 4 views
-1

私は、モデルを完全に公開するために、他の多くのアプリケーションで使用されている既存のモデルクラスとモデルサービスを使用してWeb APIを作成しています。 Web APIに同じモデルオブジェクトを使用し、いくつかのフィールドだけを公開できますか?c#ネストされたクラスオブジェクトの子プロパティの直列化を避ける

JsonContractResolverを使用しようとしましたが、ネストされたクラスの子プロパティをシリアル化できません。

/*Model class*/ 
    public class A 
    { 
    public int A1 { get; set; } 
    public DateTime A2 { get; set; } 
    public List<B> A3 { get; set; } 
    } 
    public class B 
    { 
    public string B1 { get; set; } 
    public string B2 { get; set; } 
    public string B3 { get; set; } 
    } 

予想される出力: Webアプリケーションのメソッドは、クラスAのメンバーを取得すると、それは次のようなJSONを返す必要があります。ウェブAPIは、クラスAのメンバーを取得すると

{"A1":1,"A2":"2017-02-10","A3":[{"B1":"test1","B2":"test2","B3":"test3"}]} 

を、その必要があります返品:

{"A1":1,"A3":[{"B1":"test1"}]} 

最良の方法を教えてください。

+1

から構築することができ - 使用のviewmodels、匿名型を使用するか、または[アプリケーションまたはエンドポイントごとにカスタムのシリアライザを使用する](http://stackoverflow.com/questions/25157511/newtonsoft-add-jsonignore-at-runtime)あなたの研究は何を示しましたか? – CodeCaster

答えて

0

各ドメインにはそれぞれ独自のモデル/クラスが必要です。 Webアプリケーションにはすべてのフィールドを公開するモデルが必要で、Web APIにはフィールドの一部のみを公開するモデルが必要です。

namespace X.WebApp.Models { 

    public class A { 
     public int A1 { get; set; } 
      public DateTime A2 { get; set; } 
      public List<B> A3 { get; set; } 
    } 

    public class B { 
     public string B1 { get; set; } 
      public string B2 { get; set; } 
      public string B3 { get; set; } 
    } 
} 

namespace X.WebApi.Models { 

    public class A { 
     public int A1 { get; set; } 
      public List<B> A3 { get; set; } 
    } 

    public class B { 
     public string B1 { get; set; } 
    } 
} 

これらのモデルは_「のWeb APIの同じモデルオブジェクトを使用し、一部のフィールドだけを公開」_、より一般的なモデルの名前空間

namespace X.Common.Models { 

    public class A { 
     public int A1 { get; set; } 
      public DateTime A2 { get; set; } 
      public List<B> A3 { get; set; } 
     // More fields... 
    } 

    public class B { 
     public string B1 { get; set; } 
      public string B2 { get; set; } 
      public string B3 { get; set; } 
     // More fields... 
    } 
} 
関連する問題