JSON.Net: 비공개 및 상속 필드 직렬화
이 가이드에서는 비공개 필드와 하위 클래스에서 상속된 필드를 포함하여 JSON.Net을 사용하여 복잡한 개체를 직렬화하는 방법을 보여줍니다. 직렬화는 객체를 저장 가능하거나 전송할 수 있는 형식으로 변환합니다. 비공개 멤버나 복합 상속이 있는 객체의 경우 JSON.Net에서는 사용자 정의 처리가 필요합니다.
도전:
다양한 접근성 필드(공개, 비공개, 보호 등)가 있는 클래스 계층 구조가 있습니다. 예를 들어 데이터 백업을 위해 개인 필드와 하위 클래스의 필드를 포함하여 모든 필드를 직렬화해야 합니다.
해결책:
사용자 정의 계약 확인자를 사용하면 JSON.Net의 기본 직렬화 동작을 재정의할 수 있습니다. 이 해석기는 액세스 수정자에 관계없이 모든 필드를 강제로 포함합니다.
JSON.Net 구현:
<code class="language-csharp">var settings = new JsonSerializerSettings { ContractResolver = new MyContractResolver() }; var json = JsonConvert.SerializeObject(myObject, settings);</code>
사용자 지정 계약 해결 프로그램(MyContractResolver
):
<code class="language-csharp">public class MyContractResolver : Newtonsoft.Json.Serialization.DefaultContractResolver { protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization) { var props = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) .Select(p => base.CreateProperty(p, memberSerialization)) .Union(type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) .Select(f => base.CreateProperty(f, memberSerialization))) .ToList(); props.ForEach(p => { p.Writable = true; p.Readable = true; }); return props; } }</code>
이 해석기는 해당 유형과 해당 기본 클래스의 모든 인스턴스 필드와 속성(공개 및 비공개)을 검사합니다. 그런 다음 각 속성을 읽기 및 쓰기 가능으로 표시하여 완전한 직렬화를 보장합니다. 비공개 필드를 직렬화하기 위해 이 접근 방식을 사용할 때는 특히 보안에 민감한 데이터의 경우 주의해서 수행해야 합니다.
위 내용은 JSON.Net에서 프라이빗 및 하위 클래스 필드를 직렬화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!