我正在使用我现有的模型类和模型服务编写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"}]}
请建议最佳方法。
答案 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...
}
}