【问题标题】:c# avoid serialization of child properties of a nested class objectc#避免嵌套类对象的子属性的序列化
【发布时间】:2017-06-29 01:36:56
【问题描述】:

我正在使用我现有的模型类和模型服务编写一个 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"}]}

请建议最好的方法。

【问题讨论】:

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


【解决方案1】:

每个域都应该有自己的模型/类。 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...
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2011-12-21
    相关资源
    最近更新 更多