【发布时间】:2017-08-17 06:23:40
【问题描述】:
我正在用 C# 实现一个 API 客户端。我正在开发的 API 是 Close.IO。
它们允许更新对象上的单个字段,例如)更新lead.description
https://developer.close.io/#leads-update-an-existing-lead
请求正文
{
"description": "Best show ever canceled. Sad."
}
我的问题是,如何在 c# 中创建一个新的 Lead 对象,更新“description”属性,然后仅将更新后的 description 属性作为请求正文的一部分发送?
public class Lead{
public int id {get;set;}
public string description {get;set;}
public string notes {get;set;}
}
var lead = new Lead(){
id = 1,
description = "Best show ever canceled. Sad."
}
var body = JsonConvert.SerializeObject(lead);
client.Update<Lead>(body);
在上面的示例中,id 为 1 的潜在客户将被更新,描述将被设置,“notes”属性将被清除。
请求正文
{
"id":1,
"description": "Best show ever canceled. Sad.",
"notes" : ""
}
我只希望“描述”字段得到更新,而注释字段保持不变。我正在寻找一种干净的方式来使用我的类型化对象并将其序列化到请求正文中,并且只更新脏属性。
【问题讨论】:
-
我想最大的问题是,你是如何序列化那个对象的?
null属性应该被序列化为空字符串似乎很奇怪。再说一次,我自己在使用 xml 时也遇到了类似的问题,但使用反序列化 - wcf 将 null、空和不存在全部反序列化为 null。 -
我正在使用 Json.Net 进行序列化,我在示例中添加了附加代码以显示这一点
-
奇怪,5 年前someone had the exact opposite problem。会发生什么变化,还是我们在
Lead上缺少一个将notes设置为默认值的 ctor?