C# 在newtonsoft序列化上忽略对象类型值

C# 在newtonsoft序列化上忽略对象类型值,c#,json.net,C#,Json.net,希望获得忽略默认值的序列化输出。在我的例子中,我为对象属性定义了默认值为null。忽略对象数据基于类型的默认值时遇到问题。找到下面的代码 MyClass myClass = new MyClass(); myClass.item1 = false; myClass.item2 = 0; myClass.item3 = "test"; myClass.item4 = new { item1Val = f

希望获得忽略默认值的序列化输出。在我的例子中,我为对象属性定义了默认值为null。忽略对象数据基于类型的默认值时遇到问题。找到下面的代码

MyClass myClass = new MyClass();
            myClass.item1 = false;
            myClass.item2 = 0;
            myClass.item3 = "test";
            myClass.item4 = new { item1Val = false, item2Val = 0, item3Val = "test" };


            var output = JsonConvert.SerializeObject(myClass, Formatting.Indented, new JsonSerializerSettings
                {
                    DefaultValueHandling = DefaultValueHandling.Ignore,
                    NullValueHandling = NullValueHandling.Ignore
                });

//...

public class MyClass
    {
        [DefaultValue(true)]
        public bool item1 { get; set; }

        [DefaultValue(10)]
        public int item2 { get; set; }

        [DefaultValue("")]
        public string item3 { get; set; }

        [DefaultValue(null)]
        public object item4 { get; set; }
    }

实际产量:


{
  "item1": false,
  "item2": 0,
  "item3": "test",
  "item4": {
    "item3Val": "test"
  }
}

预期产出:


{
  "item1": false,
  "item2": 0,
  "item3": "test",
  "item4": {
    "item1Val": false,
    "item2Val": 0,
    "item3Val": "test"
  }
}

注: 我需要此全局设置DefaultValueHandling=DefaultValueHandling.Ignore, &NullValueHandling=NullValueHandling.Ignore


任何人都可以就此提供建议。

您需要DefaultValueHandling=DefaultValueHandling。包括以获得预期的输出。否则,您需要使用已定义的DefaultValue而不是“object”指定一个适当的类型。是否有可能仅对object类型忽略此选项?在这种情况下,我很困惑,是否内部预定义了任何基于类型的默认值(即bool(false)、integer(0)),因为我没有在任何地方定义这些默认值。我猜DefaultValueHandling仅依赖于[DefaultValue]属性。也许这可以帮助您: