PopulateWithNonDefaultValues的部分更新将覆盖子类中的空字段

时间:2019-03-05 09:25:25

标签: servicestack

我有一个包含子类“地址”的类“公司”。 “地址”包含字段“城市”和字段“邮政编码”。都可以为空(字符串)。

我有一家现有公司,其中填充了地址类别中的两个字段。我想做的是使用公司对象更新邮政编码字段,其中仅填充地址类中的一个字段。

结果不是我想要的。目标对象中的“城市”字段与“邮政编码”一起被覆盖。

在我看来,它代替了地址字段,而不仅仅是类中填充的字段。

有人知道要解决这个问题吗?

原始对象:

 "name": "Some company",
 "address": {
        "city": "New York",
        "postalCode": "1234"
    }

更新使用:

 "name": null,
 "address": {
        "city": null,
        "postalCode": "1122"
    }

结束于:

 "name": "Some company",
 "address": {
        "city": null,
        "postalCode": "1122"
    }

1 个答案:

答案 0 :(得分:1)

如果扩展名不为null,则使用Auto Mapping PopulateWithNonDefaultValues()扩展方法将替换地址属性,这就是为什么生成的地址最终使用更新的地址(即 >不会合并这两个地址,而是将其替换为更新后的非空地址。

如果您要合并地址,则需要分别进行操作,例如:

original.Address.PopulateWithNonDefaultValues(updated.Address);
updated.Address = null; // skip populating Address
original.PopulateWithNonDefaultValues(updated);