이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 33737|회답: 2

[출처] Newtonsoft.Json은 DataContract 기능을 무시합니다

[링크 복사]
게시됨 2018. 5. 30. 오후 4:50:17 | | | |
Newtonsoft.json아시다시피, 일반적으로 사용되는 JSON 직렬화 및 역직렬화 도구

DataContractAttributeDataContractSerializer와 같은 직렬라이저로 직렬화할 수 있는 데이터 계약을 정의하거나 구현하기 위해 해당 타입을 지정합니다. 타입을 직렬화할 수 있게 하려면, 타입 작성자는 그 타입에 대한 데이터 계약을 정의해야 합니다.

어려운 문제에 부딪혔습니다,부모 클래스는 [DataContract] 기능을 가지고, 자식 클래스는 부모 클래스를 상속하며, 서브클래스의 모든 속성은 [DataMember] 속성으로 직렬화 및 비직렬화되어야 합니다부모 클래스가 다른 사람의 캡슐화된 dll이기 때문에, 부모 클래스의 [DataContract] 기능은 삭제할 수 없습니다!

테스트는 다음과 같습니다: Test1 클래스는 [DataContract] 기능을 가지고 있으며, 속성에 [DataMember] 기능이 추가되지 않으면 직렬화 및 디직렬라이저가 실패할 수 있습니다. 아래 그림에서 확인할 수 있습니다:




우리는 Test1 클래스의 [DataContract] 특징에 주석을 달았고, 다음과 같이 정상적으로 직렬화와 비직렬화가 가능하다는 것을 발견했습니다:



Newtonsoft.Json의 고급 사용 방법이 이 기능을 무시할 수 있나요? 답은 '예'입니다!

Json.Net의 OptOut 속성을 사용하세요. 데이터가 DataContract보다 우선권을 가집니다.

//
        초록:
        모든 공용 회원은 기본적으로 연속 번호로 지정되어 있습니다. 회원은 Newtonsoft.Json.JsonIgnoreAttribute를 사용하여 제외할 수 있습니다.
        또는 System.NonSerializedAttribute. 이것이 기본 멤버 직렬화 패턴입니다.
        옵트아웃 = 0,
        //
        초록:
        Newtonsoft.Json.JsonPropertyAttribute 또는 System.Runtime.Serialization.DataMemberAttribute로 표시된 멤버만 해당됩니다
        연재 처리되어 있습니다. 이 멤버 직렬화 모드는 태깅으로도 설정할 수 있습니다
        클래스와 System.Runtime.Serialization.DataContractAttribute를 포함합니다.
        옵틴 = 1,
        //
        초록:
        모든 공공 및 민간 분야는 연속 처리됩니다. 회원은 Newtonsoft.Json.JsonIgnoreAttribute를 사용하여 제외할 수 있습니다.
        또는 System.NonSerializedAttribute. 이 멤버 직렬화 패턴도 괜찮습니다
        클래스에 System.SerializableAttribute를 태그하고 IgnoreSerializableAttribute를 설정하여 설정하세요
        Newtonsoft.Json.Serialization.DefaultContractResolver를 false로 설정하세요.
        필드 = 2


테스트 코드:







이전의:앱도메인 모니터링
다음:. .NET에서 가장 빠른 OOM 객체 매핑 컴포넌트인 Tiny Mapper 프로젝트에서 사용되었습니다
게시됨 2018. 6. 1. 오후 1:20:10 |
json 문자열이 객체인지 배열인지 판단하세요
Newtonsoft.Json.Linq.JToken s = Newtonsoft.Json.Linq.JToken.Parse(str);

switch (s.Type.ToString())
                {
                    케이스 "객체":
                        브레이크;
                    케이스 "배열":
                        브레이크;
                    기본값:
                        브레이크;
                }
게시됨 2020. 8. 21. 오전 11:52:32 |
집주인은 허벅지를 요구하는 데 능숙합니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com