Json.NET에서 JSON 역직렬화 중 누락된 필드를 처리하는 방법
Json.NET을 사용하여 JSON 개체를 역직렬화할 때 누락된 필드를 올바르게 처리하는 것이 중요합니다. 기본적으로 Json.NET은 누락된 속성을 무시하고 기본값을 반환하므로 후속 처리 중에 오류가 발생할 수 있습니다.
다음 코드를 고려해보세요.
<code class="language-csharp">using Newtonsoft.Json; namespace Json_Fail_Test { [JsonObject(MemberSerialization.OptOut)] private class MyJsonObjView { [JsonProperty("MyJsonInt")] public int MyJsonInt { get; set; } } static void Main(string[] args) { string correctData = @"{'MyJsonInt': 42}"; string wrongData = @"{'SomeOtherProperty': 'fbe8c20b'}"; var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData); var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData); Console.WriteLine(goodObj.MyJsonInt); // 输出 42 Console.WriteLine(badObj.MyJsonInt); // 输出 0 } }</code>
이 코드는 JSON 개체를 MyJsonObjView 개체로 역직렬화하려고 시도합니다. 올바른 JSON에는 "MyJsonInt" 속성이 포함되어 있지만 잘못된 JSON에는 포함되어 있지 않습니다. 출력은 다음과 같습니다.
<code>42 0</code>
보시다시피 잘못된 JSON을 역직렬화하면 코드가 자동으로 실패하고 누락된 속성에 대한 기본값을 반환합니다. 이러한 동작을 방지하려면 MissingMemberHandling
설정을 사용할 수 있습니다.
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings(); settings.MissingMemberHandling = MissingMemberHandling.Error;</code>
MissingMemberHandling
을 Error
으로 설정하면 역직렬화 중에 누락된 속성이 발견될 때 Json.NET에서 예외를 발생시키도록 지시합니다.
<code class="language-csharp">try { var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData, settings); var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData, settings); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name + ": " + ex.Message); }</code>
이제 잘못된 JSON을 역직렬화하면 예외가 발생합니다.
<code>JsonSerializationException: Could not find member 'SomeOtherProperty' on object of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>
이 예외는 속성 누락으로 인해 역직렬화가 실패했음을 명확히 나타내므로 오류를 적절하게 처리할 수 있습니다.
MissingMemberHandling
속성을 설정하면 누락된 JSON 속성을 처리할 때 Json.NET의 동작을 보다 효과적으로 제어할 수 있으므로 잠재적인 오류를 방지하고 코드의 견고성을 향상시킬 수 있습니다.
위 내용은 Json.NET에서 JSON 역직렬화 중에 누락된 필드를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!