중첩 클래스 직렬화 및 역 직렬화

mmimaa

이전 버전과 호환되는 방식으로 수업을 저장하기 위해 Gson을 사용하고 있습니다. 직렬화하려는 다음 싱글 톤 클래스가 있습니다.

public class DataHandler implements Serializable {
      private static DataHandler instance; //SINGLETON
      private HashMap<FormIdentification, BaseForm> forms =
        new HashMap<FormIdentification, BaseForm>();

      public void read(){
        //read the json string
        Gson gson = new Gson();
        instance = gson.fromJson(json, DataHandler.class);      
      }

      public void write(){
        Gson gson = new Gson();
        String json = gson.toJson(instance);
        //write the json string
      }
}

public class FormIdentification implements Serializable{
    public String name, type;
    byte[] id;

    public FormIdentification(String name, String type, byte[] id) {
        this.name = name;
        this.type = type;
        this.id = id;
    }
}

public abstract class BaseForm implements Serializable{
    protected FormIdentification identity;
    protected final List<BaseQuestion> questions = new ArrayList<BaseQuestion>();
    protected final HashMap<String, List<String>> personalData = new HashMap<String, List<String>>();
}

public class LinearForm extends BaseForm {
    private DefaultMutableTreeNode criteria;
}

public abstract class BaseQuestion implements Serializable{
    protected String question;
    protected List<String> possibleAnswers;
}

다음 json으로 직렬화됩니다.

{
       "forms":{
          "test.Structures.FormIdentification@7b875faa":{
             "criteria":{
                "allowsChildren":true
             },
             "identity":{
                "name":"Mircea",
                "type":"linear",
                "id":[
                   111,
                   119
                ]
             },
             "questions":[

             ],
             "personalData":{
                "Nume":[

                ]
             }
          }
       }
    }

json은 완전하며 생성 될 때 클래스에 포함 된 모든 데이터를 가지고 있습니다. 그러나 역 직렬화하려고 할 때 다음 오류가 발생합니다.

SEVERE: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 12

압축 형식이므로 1 행 12 열은 { "forms": { "test.Structures ..."여야합니다.

저는 json을 처음 사용하여 솔루션을 찾기 시작했지만 솔루션을 찾지 못했습니다. TypeToken을 사용하여 캐스팅을 시도했고 사용자 지정 serializer를 작성해 보았지만 관리하지 않았습니다. 또한 "forms"변수 만 직렬화하려고 시도했지만 동일한 오류가 발생합니다.

글렌 레인

JSON 객체는 키 / 값 쌍의 모음입니다. 값은 JSON 값 (문자열, 숫자, 개체, 배열, true, false 또는 null)이 될 수 있습니다. 그러나 JSON 개체의 키는 문자열 만 될 수 있습니다.

JSON 직렬화시 Map<FormIdentification, BaseForm>키는 FormIdentification. GSON이 할 수있는 최선의 방법 FormIdentification.toString()은 키의 문자열을 가져 오는 데 사용 하는 것입니다.

그러나 JSON 역 직렬화 중에는 FormIdentification문자열에서 가져 오는 방법을 알 수있는 방법이 없습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

특정 중첩 속성을 클래스로 역 직렬화

분류에서Dev

중첩 클래스에 대한 JSON (역) 직렬화

분류에서Dev

플랫 XML에서 역 직렬화 된 중첩 클래스

분류에서Dev

SQLAlchemyAutoSchema 중첩 역 직렬화

분류에서Dev

YamlDotNEt 및 C #의 사용자 지정 형식 클래스를 사용하여 중첩 된 YAML 역 직렬화

분류에서Dev

Java에서 인터페이스 직렬화 및 역 직렬화

분류에서Dev

직렬화 및 역 직렬화 람다

분류에서Dev

자식 직렬화 및 역 직렬화

분류에서Dev

char (s) 직렬화 및 역 직렬화

분류에서Dev

스프레이 json 중첩 클래스를 역 직렬화 할 수 없음

분류에서Dev

ObjectInputStream에서 하위 클래스 중 하나로 역 직렬화

분류에서Dev

GSON 역 직렬화 / 직렬화 계층 구조 클래스

분류에서Dev

어떻게 직렬화 및 역 직렬화 IGraphServiceClient 클라이언트 객체에?

분류에서Dev

Jackson을 사용하여 JAVA 클래스를 대상으로하는 JSON 직렬화 및 역 직렬화

분류에서Dev

사용자 지정 클래스의 개체에 대한 NSMutableArray의 직렬화 및 역 직렬화

분류에서Dev

OData 중첩 응답 역 직렬화

분류에서Dev

중첩 된 JSON의 Unity 역 직렬화

분류에서Dev

중첩 된 JSON 역 직렬화

분류에서Dev

CSV 파일을 스트림으로 직렬화 및 역 직렬화

분류에서Dev

클래스의 Jackson 역 직렬화

분류에서Dev

역 직렬화 클래스의 Autowire

분류에서Dev

중첩 된 JSON API 데이터를 CSV로 역 직렬화 및 내보내기

분류에서Dev

JSON 역 직렬화-값으로 필요한 중첩 목록 및 키

분류에서Dev

JSON.NET 및 생성 된 클래스로 요소 역 직렬화

분류에서Dev

JSON.NET 및 생성 된 클래스로 요소 역 직렬화

분류에서Dev

xsd.exe에서 XmlReader 및 클래스를 사용하여 Xml 역 직렬화

분류에서Dev

Jackson의 다형성 직렬화 / 역 직렬화 및 사용자 지정 직렬화 / 역 직렬화

분류에서Dev

잭슨 사용자 정의 직렬화 및 역 직렬화

분류에서Dev

개체 컬렉션 직렬화 및 역 직렬화

Related 관련 기사

  1. 1

    특정 중첩 속성을 클래스로 역 직렬화

  2. 2

    중첩 클래스에 대한 JSON (역) 직렬화

  3. 3

    플랫 XML에서 역 직렬화 된 중첩 클래스

  4. 4

    SQLAlchemyAutoSchema 중첩 역 직렬화

  5. 5

    YamlDotNEt 및 C #의 사용자 지정 형식 클래스를 사용하여 중첩 된 YAML 역 직렬화

  6. 6

    Java에서 인터페이스 직렬화 및 역 직렬화

  7. 7

    직렬화 및 역 직렬화 람다

  8. 8

    자식 직렬화 및 역 직렬화

  9. 9

    char (s) 직렬화 및 역 직렬화

  10. 10

    스프레이 json 중첩 클래스를 역 직렬화 할 수 없음

  11. 11

    ObjectInputStream에서 하위 클래스 중 하나로 역 직렬화

  12. 12

    GSON 역 직렬화 / 직렬화 계층 구조 클래스

  13. 13

    어떻게 직렬화 및 역 직렬화 IGraphServiceClient 클라이언트 객체에?

  14. 14

    Jackson을 사용하여 JAVA 클래스를 대상으로하는 JSON 직렬화 및 역 직렬화

  15. 15

    사용자 지정 클래스의 개체에 대한 NSMutableArray의 직렬화 및 역 직렬화

  16. 16

    OData 중첩 응답 역 직렬화

  17. 17

    중첩 된 JSON의 Unity 역 직렬화

  18. 18

    중첩 된 JSON 역 직렬화

  19. 19

    CSV 파일을 스트림으로 직렬화 및 역 직렬화

  20. 20

    클래스의 Jackson 역 직렬화

  21. 21

    역 직렬화 클래스의 Autowire

  22. 22

    중첩 된 JSON API 데이터를 CSV로 역 직렬화 및 내보내기

  23. 23

    JSON 역 직렬화-값으로 필요한 중첩 목록 및 키

  24. 24

    JSON.NET 및 생성 된 클래스로 요소 역 직렬화

  25. 25

    JSON.NET 및 생성 된 클래스로 요소 역 직렬화

  26. 26

    xsd.exe에서 XmlReader 및 클래스를 사용하여 Xml 역 직렬화

  27. 27

    Jackson의 다형성 직렬화 / 역 직렬화 및 사용자 지정 직렬화 / 역 직렬화

  28. 28

    잭슨 사용자 정의 직렬화 및 역 직렬화

  29. 29

    개체 컬렉션 직렬화 및 역 직렬화

뜨겁다태그

보관