2017-02-10 69 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:

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

當web API獲取類A的成員,它應該退貨:

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

請指教應該採取什麼樣的最佳方法。

+1

_「使用相同的模型對象的Web API和只露出幾個字段」 _ - 使用的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; } 
    } 
} 

這些模型可以從一個更普遍的車型命名空間中建立

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... 
    } 
}