Using Json.NET to detect undefined properties after deserialization
In JSON-based applications, it is critical to handle deserialization errors efficiently. While the default behavior of Json.NET is to silently fall back to default values, there are situations where exceptions need to be thrown.
To meet this need, Json.NET provides MissingMemberHandling
settings. By setting this property to Error
, any attempt to deserialize a JSON property without a corresponding model property will trigger JsonSerializationException
.
Consider the following code:
<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>
With this modified code, deserialization of the wrongData
object will now result in the following error:
<code>System.Runtime.Serialization.Json.JsonSerializationException: Could not find member 'SomeOtherProperty' on object of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>
This error message clearly identifies the property that caused the deserialization to fail, making debugging more efficient. By using the MissingMemberHandling
setting, you can force strict attribute validation during deserialization to ensure data integrity.
The above is the detailed content of How Can I Detect Undefined Properties During JSON Deserialization with Json.NET?. For more information, please follow other related articles on the PHP Chinese website!