【问题标题】:Specify properties and field to encode and decode with Newtonsoft JSON使用 Newtonsoft JSON 指定要编码和解码的属性和字段
【发布时间】:2020-11-19 09:17:33
【问题描述】:

Newtonsoft JSON 是否可以指定哪些字段应该编码,哪些应该解码?

我有一个对象,其中所有字段都应反序列化,但在序列化时应忽略某些字段。

我知道JsonIgnoreAttribute,但这两个方向都忽略了。

有谁知道如何做到这一点?

【问题讨论】:

标签: c# json json.net


【解决方案1】:

您可以依靠 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"}

【讨论】:

  • 这正是我想要的!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2019-06-04
  • 2014-10-10
  • 1970-01-01
  • 2019-03-23
  • 2019-03-06
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
相关资源
最近更新 更多