해당 내용을 설명하기 전에 json 구조와 Class 구조를 미리 알고 가기 위해 사진을 먼저 올렸다.
Q.Data를 사용하기 위해 역직렬화를 했는데 왜 Data에 Null 들어오는거야??
A.
직렬화는 접근제한자의 상관없이 작업을 할 수 있다.
하지만 역직렬화시에 필드(변수)가 private 및 protected으로 설정되어 있으면, 해당 필드에 접근할 수 없기 때문에 null 값이나 더미 데이터를 할당하게 됩니다.
이를 방지하기 위해 필드에 대해 JsonProperty 어트리뷰트를 사용하여 공개적으로 접근 가능하게 하거나, public 프로퍼티를 제공하여 역직렬화 시 데이터를 올바르게 설정할 수 있도록 해야 합니다.
Q.위에 SkillDeck을 역직렬화 하는데 자꾸 Data가 중복되서 나와요
A.
이런 경우는 직렬화/역직렬화시에 .json Data를 잘못 불러오거나 쓸때 일어난다.
위에 .json 하고 구조가 좀 다른데 "$type" 이라는 문구가 추가 되어있다.
그럼 저 "$type"은 어떡해 나온것인가??
직렬화 메서드 호출시에 인자값으로 settings으로 호출하게되면 자료형의 실제 객체타입으로 정확하게 역직렬화하는데 도움이 된다.
여기서 도움은 상속되있는 자식클래스로 직렬화 하고 역직렬화로 부모 클래스로 하는경우데 도움이 된다.
하지만 여기서는 자식 클래스가 아닌 부모클래스에 해당 작업을 취하니 역직렬화시에 Data를 두번 만들게 되는것이다.
즉, 역직렬화의 저 setting값을 없애주면 정상적으로 동작이 잘된다.
결론:
직렬화는 접근 제한자에 구애받지 않지만, 역직렬화에서는 접근 제한자로 인해 데이터가 올바르게 설정되지 않을 수 있다.
'내일배움캠프_Unity_6기 > TIL(Today I Learend)' 카테고리의 다른 글
TIL : 2024-10-04(금) :: C# delegate,event (0) | 2024.10.04 |
---|---|
TIL : 2024-10-03(목) :: C# 람다식 , Predicate<T> (1) | 2024.10.03 |
TIL : 2024-10-01(화) :: C# 문자열 변수를 enum 자료형으로 형변환하기,박싱/언박싱을 지양해야되는 이유 (0) | 2024.10.01 |
TIL : 2024-09-30(월) :: C# .csv 외부파일 읽고 데이터 사용하기 (0) | 2024.09.30 |
TIL : 2024-09-27(금) :: 직렬화,역직렬화 간단 설명 (0) | 2024.09.27 |