0

次のフィールドを持つオブジェクトをシリアル化しようとしています。

private TreeSet<TimeSlot<T>> counterTimeSlotSet = 
    new TreeSet<TimeSlot<T>>(
            new Comparator<TimeSlot<T>>(){
                @Override
                public int compare(TimeSlot<T> cb1, TimeSlot<T> cb2) {
                    return cb1.getPeriod().compareTo(cb2.getPeriod());
                }
            });

シリアル化コードは次のとおりです。

    BaseSlidingWindow<BasicVelocityCounter> window1 = 
        new BaseSlidingWindow<BasicVelocityCounter>(
                BasicVelocityCounter.class, slidingWindowConfig);
    ...

    // jackson serializer test
    Version version = new Version(1, 0, 0, "SNAPSHOT");
    SimpleModule module = new SimpleModule("ZORRO", version);
    module = module.addSerializer(new DateTimeSerializer());
    // and so on...
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(module);

    mapper.writeValue(new File("C:\\tmp\\window1.json"), window1);

問題はwindow1、タイプのメンバーがTreeSet<TimeSlot<T>>シリアル化されていないことです。ログに例外は表示されません。TreeSet<TimeSlot<T>>メンバーを含まないjsonを取得しています。

ジャクソンコードをデバッグしても、私はどこにもつながりませんでした。シリアル化するには何をする必要があるのだろうかTreeSet<TimeSlot<T>>

編集

BaseSlidingWindowのクラス定義は次のようになります。

public class BaseSlidingWindow<T extends ICountable<T>> 
                        implements ISlidingWindow<T>{

    boolean dirty = false;

    private DateTime createdOn;
    private DateTime updatedOn;
    private DateTime windowLifeStart;
    private DateTime windowLifeEnd;

    private final SlidingWindowConfig slidingWindowConfig;

    private TreeSet<TimeSlot<T>> counterTimeSlotSet = 
    new TreeSet<TimeSlot<T>>(
            new Comparator<TimeSlot<T>>(){
                @Override
                public int compare(TimeSlot<T> cb1, TimeSlot<T> cb2) {
                    return cb1.getPeriod().compareTo(cb2.getPeriod());

                }
            });

    private final Class firstSeenDataType;

    // constructor, accessors and IFS implementations
    // ...
}
4

1 に答える 1

2

にパブリックフィールドやゲッターが表示されませんBaseSlidingWindow。そのため、シリアル化するための観察可能なプロパティはありません。これが問題である場合、最も簡単な方法は、シリアル化する@JsonPropertycounterTimeSlotSetのプロパティと他のプロパティを追加することです。

別の方法には、「getter」メソッド(のようなgetCounterTimeSlotSet)を追加するか、デフォルトの可視性設定を変更して非公開フィールドも含めることが含まれます。

于 2012-06-11T17:30:06.603 に答える