仅序列化对象上的脏属性

时间:2017-08-16 21:03:11

标签: c# api

我正在使用C#实现API客户端。我正在处理的API是Close.IO。

它们允许更新对象上的单个字段,例如更新lead.description

https://developer.close.io/#leads-update-an-existing-lead

请求正文

{
    "description": "Best show ever canceled.  Sad."
}

我的问题是,我如何在c#中创建一个新的Lead对象,更新"描述"属性,然后只发送更新的描述属性作为请求体的一部分?

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的潜在客户将更新,并且说明将被设置,并且&#34; notes&#34;财产将被清除。

请求正文

{
    "id":1,
    "description": "Best show ever canceled.  Sad.",
    "notes" : ""
}

我只想要&#34;描述&#34;要更新的字段,并且注释字段不变。我正在寻找一种干净的方法来使用我的类型化对象并将其序列化到请求体中,并且只更新脏属性。

1 个答案:

答案 0 :(得分:0)

这是内置于Json.Net中的,具有以下设置..

var data = new { x = 1};
var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
var text = JsonConvert.SerializeObject(data, Formatting.Indented, settings);