使用Json.NET检测反序列化后的未定义属性
在基于JSON的应用程序中,有效处理反序列化错误至关重要。虽然Json.NET的默认行为是静默回退到默认值,但在某些情况下需要抛出异常。
为了满足这一需求,Json.NET提供了MissingMemberHandling
设置。通过将此属性设置为Error
,任何尝试反序列化JSON属性而没有相应模型属性的操作都将触发JsonSerializationException
。
考虑以下代码:
<code class="language-csharp">using Newtonsoft.Json; using System; namespace JsonFailTest { [JsonObject(MemberSerialization.OptOut)] public class MyJsonObjView { [JsonProperty("MyJsonInt")] public int MyJsonInt { get; set; } } public static class Program { public static void Main(string[] args) { string correctData = @"{'MyJsonInt': 42}"; string wrongData = @"{'SomeOtherProperty': 'fbe8c20b'}"; var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData); Console.WriteLine(goodObj.MyJsonInt); try { JsonSerializerSettings settings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Error }; var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData, settings); Console.WriteLine(badObj.MyJsonInt); } catch (Exception ex) { Console.WriteLine($"{ex.GetType().Name}: {ex.Message}"); } } } }</code>
使用此修改后的代码,wrongData
对象的反序列化现在将导致以下错误:
<code>System.Runtime.Serialization.Json.JsonSerializationException: Could not find member 'SomeOtherProperty' on object of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>
此错误消息清楚地指出了导致反序列化失败的属性,从而提高了调试效率。通过使用MissingMemberHandling
设置,您可以在反序列化期间强制执行严格的属性验证,以确保数据完整性。
以上是如何在使用 Json.NET 进行 JSON 反序列化期间检测未定义的属性?的详细内容。更多信息请关注PHP中文网其他相关文章!