해당 내용을 설명하기 전에 json 구조와 Class 구조를 미리 알고 가기 위해 사진을 먼저 올렸다.

 

Save와 Load시에 사용되는 .Json Data
Skill Class 구조

 

역직렬화에 되는 상속 클래스들


 

Q.Data를 사용하기 위해 역직렬화를 했는데 왜 Data에 Null 들어오는거야??

A.

직렬화는 접근제한자의 상관없이 작업을 할 수 있다.

하지만 역직렬화시에 필드(변수)가 private 및 protected으로 설정되어 있으면, 해당 필드에 접근할 수 없기 때문에 null 값이나 더미 데이터를 할당하게 됩니다.

이를 방지하기 위해 필드에 대해 JsonProperty 어트리뷰트를 사용하여 공개적으로 접근 가능하게 하거나, public 프로퍼티를 제공하여 역직렬화 시 데이터를 올바르게 설정할 수 있도록 해야 합니다.

 

역직렬화하는 Data들은 접근 제한자를 Public으로 선언해줘야 접근이 가능하다.

 

Skill의 Set 접근제한자도 public으로 선언하니 잘 적용되는 모습

 

 

Q.위에 SkillDeck을 역직렬화 하는데 자꾸 Data가 중복되서 나와요

index 0 ~ 2 dhk index 3 ~ 5는 같은 Data이다.

A.

이런 경우는 직렬화/역직렬화시에 .json Data를 잘못 불러오거나 쓸때 일어난다.

해당 데이터를 .json으로 직렬화 하였음

위에 .json 하고 구조가 좀 다른데 "$type" 이라는 문구가 추가 되어있다. 

$type이 작성되어 어떤 자료형인지 나타내고 있다.

그럼 저 "$type"은 어떡해 나온것인가??

var settings으로 선언하여 $type 필드를 기반으로 실제 객체타입으로 정확하게 역직렬화하는데 도움이 된다.

 

직렬화 메서드 호출시에 인자값으로 settings으로 호출하게되면 자료형의 실제 객체타입으로 정확하게 역직렬화하는데 도움이 된다.

여기서 도움상속되있는 자식클래스로 직렬화 하고 역직렬화로 부모 클래스로 하는경우데 도움이 된다.

 

역 직렬화시에도 해당 setting을 가져와서 사용 중이다.

하지만 여기서는 자식 클래스가 아닌 부모클래스에 해당 작업을 취하니 역직렬화시에 Data를 두번 만들게 되는것이다.

 

즉, 역직렬화의 저 setting값을 없애주면 정상적으로 동작이 잘된다.

역직렬화시에 seeting값을 없애주니 잘 적용 되었다.

 

결론:

직렬화는 접근 제한자에 구애받지 않지만, 역직렬화에서는 접근 제한자로 인해 데이터가 올바르게 설정되지 않을 수 있다.

+ Recent posts