0

データをシリアル化してローカル ファイルに保存するプログラムと、データをロードして使用するプログラムの 2 つの異なるプログラムがあります。問題は、逆シリアル化が機能していないことです。データをどのようにシリアル化/逆シリアル化しても、シリアル化されたのと同じ構造を再構築できません。

編集:シリアル化アクションの結果をファイルからロードする際の問題。

Edit2:私が得る例外は、スレッド「メイン」の例外 java.lang.ClassCastException: java.util.ArrayList cannot be cast to myImage です

ここでわかるように、私は深いシリアル化を使用します。

ArrayList<ArrayList<Images>> data;
...filling the data object with my data...
String serialized = new JSONSerializer().exclude("*.class")
                .deepSerialize(data);

serealize アクションの出力は次のようになります。

[
 [
   {"datetaken":"date-time","filePath":"a-file-path","folderPath":"a-folder-path","meta1":"val1","meta2":"val2"}
 ]
 [
   {more..}, 
   {more..}
 ]
]

そして、デシリアライズのために私は使用します:

ArrayList<ArrayList<TrimmedImageData>> data;
...some initializing code...
data = (ArrayList<List<Images>>) new JSONDeserializer<ArrayList<List<Images>>>()
             .use("value.values", myImage.class)
                    .deserialize(new BufferedReader(new FileReader(
                            resultsFile)));
4

1 に答える 1

0

私の場合の問題は2つのことでした:

  1. 「*.class」を除外しました。私の場合はそれを行う正当な理由がないため、削除しました。
  2. 次の例に示すように、デシリアライズ部分を変更してデータの文字列を取得し、nio を使用してデータを読み取り、それを StringBuilder と連結しました。
try {
  List<String> res = Files.readAllLines(Paths.get(myObject),
          StandardCharsets.UTF_8);
  StringBuilder anotherTest = new StringBuilder();
  for(String str : res) {
      anotherTest.append(str);
  }
  serializedString = anotherTest.toString();
} catch (IOException e) {
  e.printStackTrace();
}
于 2014-03-02T22:08:15.833 に答える