【问题标题】:JSON.NET - Ignore properties for serializationJSON.NET - 忽略序列化的属性
【发布时间】:2016-08-27 15:29:36
【问题描述】:

我目前正在使用 JSON.NET 开发 ASP.NET WebAPI。 我希望减少流量并希望忽略我的模型的某些属性以进行序列化,即我不想在我的 JSON 响应中返回它们,但我想在它们传递到我的端点时接受它们。

示例类

public class User {

    public int Id { get; set; }
    public string Name { get; set; }
    public string Role { get; set; }

}

用例

  • 我有一个将用户模型作为参数的 POST 端点。该请求包含名称和角色。这些道具应该被解析成我的用户。
  • 我有一个返回用户的 GET 端点。我只希望响应包含 ID 和名称。角色应该被忽略。

问题

当我使用 JSON.NET 中的 JsonIgnore 属性时,该属性会被完全忽略。它没有为我的响应序列化,但是当我将 JSON 用户发布到我的端点时,我的用户的属性为空。

有没有办法只为了序列化而忽略一个道具?

提前谢谢你!

【问题讨论】:

  • 我相信你可能不得不分离你的输入/输出模型
  • 我想过,但如果可能的话,想避免它。

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


【解决方案1】:

这正是数据传输对象的用途。您应该为不同的目的(GET/POST)创建不同的 DTO。

【讨论】:

  • 假设我想添加一个用户。我会有一个发送到我的端点的 UserDTO。我在数据库中创建用户并取回包含 id 的用户对象。要将创建的用户信息发送到前端,我会将该用户模型转换为另一个用户 DTO,这是正确的还是最佳实践?
  • 是的,就是这样。
  • 听起来您需要一个良好的项目结构以避免与所有模型/DTO 混淆。感谢您的回答!
  • 当然。 DTO 正是为此目的而设计的:当您跨越层/层边界时,您需要 DTO 来交换数据。如果您不区分它们,那么想象一下您明天是否想在实体的 GET 视图中添加更多内容?它会造成巨大的混乱。 (这只是一个例子)
【解决方案2】:

当你想忽略它时,使用它并传递null

[JsonProperty("property_name", NullValueHandling=NullValueHandling.Ignore)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多