我想Json.NET
当Json
字符串缺少 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
}