我有一个课程想反序列化为使用Json.NET
:
public class Settings {
public MoreSettings More { get; set; }
}
public class MoreSettings {
public int Value { get; set; }
}
我希望以下没有未知属性的示例成功反序列化。
1.1
{}
1.2
{
"MoreSettings": null
}
1.3
{
"MoreSettings": {
}
}
1.4
{
"MoreSettings": {
"Value": 42
}
}
我希望以下具有未知属性的示例反序列化失败。
2.1
{
"MoreSetting": null
}
2.2
{
"MoreSettings": {
"Values": 42
}
}
我不认为我可以使用MissingMemberHandling,因为它会因缺少值而失败。我只想在未知值上失败。替代品?
答案 0 :(得分:0)
您可以将JsonSerializerSettings.MissingMemberHandling
设置为MissingMemberHandling.Error
来引发错误,该错误是在json中找到的,但在模型中找不到。您甚至可以向JsonSerializerSettings.Error
添加处理程序以拦截错误。
public static void InitializeJsonSerializer()
{
JsonConvert.DefaultSettings = () => new JsonSerializerSettings()
{
MissingMemberHandling = MissingMemberHandling.Error,
Error = ErrorHandler,
};
void ErrorHandler(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs e)
{
if (e.ErrorContext.Error.Message.StartsWith("Could not find member "))
{
// do something...
// hide the error
e.ErrorContext.Handled = true;
}
}
}