什么相当于System.Text.Json中的Newtonsoft.Json DefaultValueHandling = DefaultValueHandling.Ignore选项

时间:2019-10-03 20:21:25

标签: c# json .net-core json.net system.text.json

我正在从.NET Core 3.0应用程序中的 2.3.0 :001 > require 'watir-webdriver' /home/user/.rvm/gems/ruby-2.3.0/gems/bootsnap-1.3.2/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require': `require "watir-webdriver"` is deprecated. Please, use `require "watir"`. => true 2.3.0 :002 > browser = Watir::Browser.new NoMethodError: undefined method `[]' for nil:NilClass from (irb):2:in `new' from (irb):2 迁移到Newtonsoft.Json

System.Text.Json中配置System.Text.Json的.NET Core 2.2应用程序中,如何使用Newtonsoft.Json具有相同的行为?您可以找到here中所述的DefaultValueHandling = DefaultValueHandling.Ignore选项。

4 个答案:

答案 0 :(得分:1)

我认为这会有所帮助

services.AddMvc().AddJsonOptions(options => options.JsonSerializerOptions.IgnoreNullValues = true);

答案 1 :(得分:1)

我认为您无法做到这一点,至少不能以简单的方式做到。您可以使用null类的IgnoreVullValues属性轻松忽略JsonSerializerOptions值,但这只会忽略null值,并且仍使用默认值序列化整数,布尔值等。 您可以找到有关JsonSerializerOptionshere

的更多信息

答案 2 :(得分:0)

有一个建议的api建议#42635用于忽略默认值,该默认值已添加到2020年11月发布的.NET Core 5.0版本中。Newtonsoft当前是唯一值得用于此特定问题的受支持解决方案。 / p>

答案 3 :(得分:0)

请尝试使用我写的作为System.Text.Json扩展的库来提供缺少的功能:https://github.com/dahomey-technologies/Dahomey.Json

您会发现支持忽略默认值:

using Dahomey.Json;
using Dahomey.Json.Attributes;
using System.Text.Json;

public class ObjectWithDefaultValue
{
    [JsonIgnoreIfDefault]
    [DefaultValue(12)]
    public int Id { get; set; }

    [JsonIgnoreIfDefault]
    [DefaultValue("foo")]
    public string FirstName { get; set; }

    [JsonIgnoreIfDefault]
    [DefaultValue("foo")]
    public string LastName { get; set; }

    [JsonIgnoreIfDefault]
    [DefaultValue(12)]
    public int Age { get; set; }
}

通过调用JsonSerializerOptions来设置json扩展,该扩展方法是在命名空间Dahomey.Json中定义的扩展方法SetupExtensions: 然后使用常规的Sytem.Text.Json API序列化您的类:

public void Test()
{
    JsonSerializerOptions options = new JsonSerializerOptions();
    options.SetupExtensions();

    ObjectWithDefaultValue obj = new ObjectWithDefaultValue
    {
        Id = 13,
        FirstName = "foo",
        LastName = "bar",
        Age = 12
    };

    string json = JsonSerializer.Serialize(obj, options); // {"Id":13,"LastName":"bar"}
}