Iva*_*vic 5 c# java asp.net spring
我在Spring和Java方面有很多经验,但现在我正在开发ASP.NET Web API项目.
所以在Spring中有@JsonView注释,我可以用它来注释我的DTO,所以我可以选择通过REST显示哪些数据.而且我发现它非常有用.但我在ASP.NET中找不到任何等价物.所以我需要为每个特殊用例创建DTO.
因此,例如在Java中,如果我有UserEntity包含有关用户的信息.有些信息可以公开查看,有些信息只能由管理员查看.siple解决方案可能就是这样
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;
}
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,对于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;}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的解决方案?是否有一些机制可用于在ASP.NET Web API中创建我的数据视图?
JSON.NET 有一个叫做“条件属性初始化”的东西。您可以编写以下格式的方法:
public bool ShouldSerialize[YourPropertyName]() => someBoolCondition;
Run Code Online (Sandbox Code Playgroud)
JSON.NET 将调用该方法来确定是否应该序列化该属性。所以你可以有类似的东西:
public DateTime DateOfBirth {get; set;}
public bool ShouldSerializeDateOfBirth() => isAdmin;
Run Code Online (Sandbox Code Playgroud)
它并不那么漂亮,JsonView但它应该可以完成工作。
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |