Json.NET 缺少成员处理设置



我想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。我想知道什么时候是这种情况。

谢谢。

您必须将 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
}

相关内容

  • 没有找到相关文章

最新更新