c#避免嵌套类对象的子属性的序列化

时间:2017-02-10 16:14:56

标签: c# json asp.net-web-api reflection properties

我正在使用我现有的模型类和模型服务编写web api,许多其他应用程序也在使用它,这需要模型在序列化中完全公开。我可以为web api使用相同的模型对象,只显示几个字段。

我尝试过使用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 个答案:

答案 0 :(得分: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...
    }
}