ASP.NET Web API 中是否有等效的@JsonView

2024-03-30

我在 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(使用前将#替换为@)

ASP.NET Web API 中是否有等效的@JsonView 的相关文章

  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 无法访问本地 Docker 容器上的 Asp.Net Core

    我在 asp net core 中创建了一个应用程序 并创建了一个 dockerfile 来生成本地映像并运行它 FROM microsoft dotnet latest COPY app WORKDIR app RUN dotnet re
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 泛型、数组和 ClassCastException

    我想这里一定发生了一些我不知道的微妙事情 考虑以下 public class Foo
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数

随机推荐

  • 如何合并 SQL Server Reports RDL 中具有相同值的行(特定列)?

    我是在 BIDS 中使用 RDL 来使用 SQL Server 2005 报告服务的新手 我需要修改现有报告 以便可以合并相邻行中的单元格 这些单元格对于该特定列具有相同的值 例如 考虑这是从报告 RDL 使用的存储过程返回的表 Id Su
  • Bash 脚本中的正则表达式

    我正在尝试检查字符串是否与此格式匹配 10 06 13 即今天的日期 或 2digits 2digits 2digits 的类似日期 我做了什么 regex 0 9 0 9 0 9 0 9 0 9 0 9 if incoming strin
  • std::sort 给出非常奇怪的结果

    我设法找到了我所看到的奇怪行为的可重现示例std sort 我正在尝试对一个成对的列表进行排序 它应该在第二个元素上排序 第二个元素的列表是 1 1 1 1 3 1 1 1 1 1 1 3 2 1 1 5 2 1 7 1 下面是我的代码 s
  • 如何编译节点 C++ 插件,以便我可以在亚马逊 AWS 上分发它?

    AWS lambda 不支持在系统上安装 Linux 二进制文件 您必须在系统上包含可执行文件 这对于可执行文件来说很容易 例如ffmpeg http johnvansickle com ffmpeg 已经提供静态可执行文件 对于编译为使用
  • JSDoc 中的 Intellisense 不适用于 VSCode 中的导入类型

    当使用 ES2015 类作为 JSDoc 中的类型时 它在通过 require 语句导入该类的文件中似乎无法正常工作 在定义该类的同一文件中工作时 一切都按预期工作 如下所示 在不同的文件中工作时 该类似乎可以正确导入并显示其构造函数类型
  • DXF解析器:椭圆角度方向

    我编写了自己的 ASCII DXF 文件解析器 但在某些特定文档中遇到了省略号问题 似乎没有定义开始和结束参数的角度方向 顺时针或逆时针 的 组代码 在大多数情况下 它是逆时针的 但并非在所有情况下 为了简化起见 这里有一个直观的示例 如您
  • 单击 div 以外的正文时隐藏 div

    我想在单击除 div 之外的页面正文时隐藏所有 div 的隐藏 我的 div 是 div div class settingsBoxExpandItem style padding 3px My Account div div class
  • Scroll Bar 的滚动条不见了

    最近 在我的 Visual Studio 2012 版本中 我的滚动条在代码编辑器 文本编辑器 中丢失了 我需要将它们找回来 这不是工具 gt 选项 gt 文本编辑器 gt 显示垂直滚动条和水平滚动条复选框的问题 它们都被检查了 当它们没有
  • 将网页从 QtWebKit.webView 打印为 pdf PyQt4

    您好 我想要完成的是 我有一个带有自定义 QtWebKit QWebView 的 QWidget 它显示特定的网站 我想使用 python 和 PyQt 将该网页保存为 pdf from PyQt4 import QtCore QtGui
  • 什么是“ChromeWebToolbarDiv”?

    我使用 AJAX 发送请求 响应以 JSON 形式返回 我们的一些用户一直抱怨他们收到错误 这表明收到了无效的 JSON 我们在服务器上检查是否发送了有效的 JSON 进一步调试时 发现以下代码被附加到 JSON 中 导致 JSON 解析失
  • 在 Selenium 中设置用户数据/配置文件不起作用。硒蟒蛇

    由于某种原因 当我尝试设置用户数据 配置文件时 它不起作用 该代码运行良好 但一旦浏览器启动 我就无法登录到我的个人资料 我该如何解决这个问题 chrome options add argument user data dir Users
  • 如何忽略缩放设置

    IE忽略缩放设置不起作用 我的代码如下 为什么它不起作用 我收到错误消息 selenium common exceptions SessionNotCreatedException 消息 启动 Internet Explorer 时出现意外
  • 带有内部 select 子句和 group by 汇总的 sql order by

    我的查询如下所示 输出 电流输出 Role Cases prepped Completed State Member 1 10 5 50 State Member 2 10 7 70 State President 10 2 20 Summ
  • header/impl 关键字在 kotlin 中的含义是什么?

    就在不久前 当我探索 Kotlin github 存储库时 我发现了一些有趣的事情 Kotlin 现在似乎有一个 header 关键字 收藏H kt https github com JetBrains kotlin blob be95f6
  • string.Empty 与 "" - 这有变化吗?

    根据这个答案 https stackoverflow com a 2905422 386869 and string Empty略有不同 因为 创建一个对象 而string Empty才不是 该答案在该问题上得票最多 然而 这个答案 htt
  • 在实体框架的 where 子句中使用列表

    我正在尝试通过一对多表检索文档 ID 我想在 where 子句中使用列表来查找与列表中每个元素相关的所有 id List
  • Magento group by 日期字段上的子句

    我需要获取指定月份一天内 grand total 的订单总数 SUM MIN MAX 和 AVG 这就是我正在做的事情 collection gt getSelect gt columns SUM base grand total AS t
  • Kotlin - StateFlow 不向其收集器发出更新

    我的应用程序中有一个 UserStateModel 数据类 类型的 StateFlow private val userStateFlow MutableStateFlow
  • TextView 作为带有文本颜色操作的进度条?

    我正在努力改进我的应用程序的用户界面 在我使用的设计中 我有一个 TextView 它将在特定时间充当进度条 ruslt 应该看起来像这样 问题是 随着进度的变化 部分文本的颜色也会改变 我研究了android中的spannablestri
  • ASP.NET Web API 中是否有等效的@JsonView

    我在 Spring 和 Java 方面有更多的经验 但现在我正在从事 ASP NET Web API 项目 因此 在 Spring 中 我可以使用 JsonView 注释来注释我的 DTO 这样我就可以选择通过 REST 显示哪些数据 我发