Json.NET 缺少成员处理设置

本文关键字:处理 设置 成员 NET Json | 更新日期: 2023-09-27 18:26:57

我想Json.NETJson字符串缺少 C# 类所需的属性时抛出JsonSerializationException

MissingMemberHandling Enumeration

当缺少成员时引发 JsonSerializationException 反序列化期间遇到。

但我认为这与我想要的相反。我认为这意味着 c# 类上缺少一个成员。我想要一个失踪的 Json 成员。

我的代码是

public MyObj Deserialise(string json)
{
    var jsonSettings = new JsonSerializerSettings();
    jsonSettings.MissingMemberHandling = MissingMemberHandling.Error;
    return JsonConvert.DeserializeObject<ApiMessage>(json, jsonSettings);
}

例如

public class MyObj
{
    public string P1 { get; set; }
    public string P2 { get; set; }
}
string json = @"{ ""P1"": ""foo"" }";

json 中缺少 P2。我想知道什么时候是这种情况。

谢谢。

Json.NET 缺少成员处理设置

您必须将 P2 属性设置为必需JsonPropertyAttribute

public class ApiMessage
{
    public string P1 { get; set; }
    [JsonProperty(Required = Required.Always)]
    public string P2 { get; set; }
}

通过您的示例,您将获得一个JsonSerializationException

希望对您有所帮助!

在类上使用JsonObject来标记所有必需的属性:

[JsonObject(ItemRequired = Required.Always)]
public class MyObj
{
    public string P1 { get; set; }  // Required.Always
    public string P2 { get; set; }  // Required.Always
}

使用JsonProperty标记所需的单个属性:

public class MyObj
{
    public string P1 { get; set; }  // Required.Default
    [JsonProperty(Required = Required.Always)]
    public string P2 { get; set; }  // Required.Always
}

结合使用两者可以执行诸如标记除一个属性之外的所有必需属性之类的操作:

[JsonObject(ItemRequired = Required.Always)]
public class MyObj
{
    public string P1 { get; set; }  // Required.Always
    public string P2 { get; set; }  // Required.Always
    public string P3 { get; set; }  // Required.Always
    public string P4 { get; set; }  // Required.Always
    public string P5 { get; set; }  // Required.Always
    [JsonProperty(Required = Required.Default)]
    public string P6 { get; set; }  // Required.Default
}