【问题标题】:JsonPatchDocument instantiate nested object if null如果为 null,则 JsonPatchDocument 实例化嵌套对象
【发布时间】:2021-10-19 23:18:30
【问题描述】:

我有一个这样的数据模型:

Student
{
    public string Name {get; set;}
    public Address address {get; set;}
}    
  
Address 
{
    public string City {get; set;}
    public int Postcode {get; set;}
}

我有以下数据:

Student1 
{
   "name": "John",
   "address": null
}

我想用以下命令修补对象

 {
    "value": "Sydney",
    "path": "student/address/city",
    "op": "add"
  }

如果地址对象为空(当应用更改到此目标“学生/地址/城市”时),是否可以初始化地址对象,而无需手动设置?

我正在使用

 jsonPatchDoc.ApplyTo(student1);

【问题讨论】:

  • 在此之前你可以阅读官方的例子,也许它可以帮助你:docs.microsoft.com/en-us/aspnet/core/web-api/…
  • 谢谢 我已经看过链接了。它基本上说这将在这种情况下抛出异常(目标不存在)“如果路径指向不存在的位置:如果要修补的资源是动态对象:添加属性。如果要修补的资源是静态的对象:请求失败。”

标签: c# json api asp.net-core json-patch


【解决方案1】:

add 是这里的错误指令。你想要replace。

在这个 JSON 中

{
   "name": "John",
   "address": null
}

字段address存在,即使它的值为空。因此,您必须将 null 值替换为包含城市的 address。这是您应该提供的说明:

[{
  "op": "replace",
  "path": "/address",
  "value": {
   "city": "Sydney"
  }
}]

这导致资源看起来像

{
   "name": "John",
   "address": {
     "city": "Sydney"
   }
}

这与 .NET 的 JsonPatchDocument 兼容。

【讨论】:

    猜你喜欢
    • 2012-07-19
    • 1970-01-01
    • 2012-10-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多