Json.NET:检测 Json 上缺少似乎是我对象成员的属性



我正在尝试使用 Json.NET 反序列化一些Json对象。我希望能够检测我的类中是否有该对象的 Json 属性中缺少成员。例如,我有一个看起来像这样的类:

public class MyClass
{
    public int n;
    public bool b;
    public string s;
}

还有一个看起来像这样的 Json

{"n":1,"b":true}

所以它缺少"s"属性。当我尝试反序列化它时,不在 Json 中的成员将具有默认值。所以 "s" 将等于空。很公平,但是当我反序列化时是否可以检测到这一点?实质上,我想做与这个 Stackoverflow 帖子几乎相反的事情

但就我而言,可悲的是,MissingMemberHandling 设置似乎什么也没做。

Json.Net提供了一种实现这一目标的方法。

可以在 Model 类中设置属性的属性。 该属性在 JSON 中不可用,它将引发异常。

这是示例

public class Videogame
{
    [JsonProperty(Required = Required.Always)]
    public string Name { get; set; }
    [JsonProperty(Required = Required.AllowNull)]
    public DateTime? ReleaseDate { get; set; }
}

测试代码

string json = @"{
                    'Name': 'Starcraft III'
                }";
Videogame starcraft = JsonConvert.DeserializeObject<Videogame>(json);

您可以在此处阅读有关此内容的更多信息

这是我

目前能想到的。

public void CheckData()
{
    if(n == null)
    {
       Console.Write("n is null");
    }
    if (b == null)
    {
       Console.Write("b is null");
    }
    if (s == null)
    {
        Console.Write("s is null");
    }
}

在 json 映射到对象后运行这样的方法,以查看是否有任何剩余的 null。

或者你可以尝试这样的东西

var fields = typeof(MyClass).GetFields();
            foreach (var field in fields)
            {
                if(!json.ContainsKey(field.Name))
                {
                    Console.Write($"{field.Name} is missing");
                }
            }

最新更新