【发布时间】:2020-11-19 09:17:33
【问题描述】:
Newtonsoft JSON 是否可以指定哪些字段应该编码,哪些应该解码?
我有一个对象,其中所有字段都应反序列化,但在序列化时应忽略某些字段。
我知道JsonIgnoreAttribute,但这两个方向都忽略了。
有谁知道如何做到这一点?
【问题讨论】:
Newtonsoft JSON 是否可以指定哪些字段应该编码,哪些应该解码?
我有一个对象,其中所有字段都应反序列化,但在序列化时应忽略某些字段。
我知道JsonIgnoreAttribute,但这两个方向都忽略了。
有谁知道如何做到这一点?
【问题讨论】:
您可以依靠 Newtonsoft 的 Conditional Property Serialization 功能来做到这一点。您需要做的就是创建一个名为ShouldSerializeXYZ 的方法,它应该返回一个布尔值。如果返回值为true,则在序列化期间XYZ 属性将被序列化。否则将被省略。
public class CustomModel
{
public int Id { get; set; }
public string Description { get; set; }
public DateTime CreatedAt { get; set; }
public bool ShouldSerializeCreatedAt() => false;
}
var json = "{\"Id\":1,\"Description\":\"CustomModel\",\"CreatedAt\":\"2020-11-19T10:00:00Z\"}";
var model = JsonConvert.DeserializeObject<CustomModel>(json);
Console.WriteLine(model.CreatedAt); //11/19/2020 10:00:00 AM
var modifiedJson = JsonConvert.SerializeObject(model);
Console.WriteLine(modifiedJson); //{"Id":1,"Description":"CustomModel"}
【讨论】: