我在 Spring 和 Java 方面有更多的经验,但现在我正在从事 ASP.NET Web API 项目。
因此,在 Spring 中,我可以使用 @JsonView 注释来注释我的 DTO,这样我就可以选择通过 REST 显示哪些数据。我发现这非常有用。但我在 ASP.NET 中找不到任何等效项。所以我需要为每个特殊用例创建 DTO。
例如,在 Java 中,如果我有包含用户信息的用户实体。有些信息可以公开查看,有些信息只能由管理员查看。简单的解决方案可能是这样的
public class UserEntity {
@JsonView(Views.Public.class)
@JsonProperty("ID")
private Integer id;
@JsonView(Views.Public.class)
private String name;
@JsonView(Views.Admin.class)
@JsonFormat(
shape = JsonFormat.Shape.STRING,
pattern = "dd-MM-yyyy hh:mm:ss")
private Date dateOfBirth;
@JsonView(Views.Admin.class)
private String email;
@JsonIgnore
private String password;
private Integer version;
}
因此,在本例中,为了实现 ASP.NET 中的等效功能,我需要创建 2 个 DTO。一种用于可以公开查看的用户,另一种用于只能由管理员查看的用户。
public class PublicUserDto {
public int ID {get; set;}
public String Name {get; set;}
}
public class AdminUserDto {
public int ID {get; set;}
public String Name {get; set;}
public DateTime DateOfBirth {get; set;}
public string Email {get; set;}
}
还有更好的解决办法吗?是否有某种机制可用于在 ASP.NET Web API 中创建数据视图?
JSON.NET 有一个叫做条件属性初始化 https://www.newtonsoft.com/json/help/html/ConditionalProperties.htm。您可以编写以下格式的方法:
public bool ShouldSerialize[YourPropertyName]() => someBoolCondition;
JSON.NET 将调用该方法来确定是否应该序列化该属性。所以你可以有这样的东西:
public DateTime DateOfBirth {get; set;}
public bool ShouldSerializeDateOfBirth() => isAdmin;
它不像JsonView
但它应该可以完成这项工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)