c# - 如果是 JSON.NET,我应该为可选字段设置任何属性吗

标签 c# json json.net

在 JSON.NET 反序列化的情况下,我应该为可选字段设置任何属性吗?我的意思是像

public class Foo
{
    [JsonProperty(Required = Required.Default)]
    public String foo { get; set; }
}

提前致谢。

最佳答案

如果您的类具有 JSON 没有的属性,则该属性在反序列化后将在您的类中具有默认值。如果您的 JSON 具有您的类没有的属性,那么 Json.Net 将在反序列化期间简单地忽略该属性。您不需要做任何特殊的事情来处理它。

您可以编写简单的测试代码来证明这一点。这里我们有一个 Foo 类,它具有属性 AC,而我们要反序列化的 JSON 具有属性 AB。当我们反序列化时,我们看到 A 被填充,B 被忽略(不在类中)并且 C 具有默认值 null(不在 JSON 中)。

class Program
{
    static void Main(string[] args)
    {
        string json = @"{ ""A"" : ""one"", ""B"" : ""two"" }";

        Foo foo = JsonConvert.DeserializeObject<Foo>(json);

        Console.WriteLine("A: " + (foo.A == null ? "(null)" : foo.A));
        Console.WriteLine("C: " + (foo.C == null ? "(null)" : foo.C));
    }

    class Foo
    {
        public string A { get; set; }
        public string C { get; set; }
    }
}

输出:

A: one
C: (null)

关于c# - 如果是 JSON.NET,我应该为可选字段设置任何属性吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25182487/

相关文章:

javascript - 在 javascript Web 应用程序中本地存储和访问数据的最佳实践是什么?

json - .NET NewtonSoft JSON 反序列化映射到不同的属性名称

c# - 将 MS CRM 2011 插件执行上下文序列化为 JSON

c# - 为什么 SemaphoreSlim.WaitAsync 不起作用?它在 GetAccesTokenAsync 调用完成之前跳转到 "return currentToken.AccessToken"

c# - Linq 计数麻烦

c# 如何动态生成 pdf 文件并将其流式传输到浏览器,而无需写入本地目录

C# WPF 数据绑定(bind)到未知数量的复选框

javascript - Highcharts 覆盖多个日期时间系列

javascript - 在js中将<th>添加到表格中

json.net - .NET Core 的 ulong 反序列化失败