0

Moshiを使用して、次の JSON ファイルを逆シリアル化します。

{
    "display": "Video 1",
    "isTranslated": false,
    "videoSize": [
        1920,
        1080
    ]
}

... 次のモデル クラスを使用します。

public class Stream {

    public final String display;
    public final boolean isTranslated;
    public final int[] videoSize;

    public Stream(String display,
                  boolean isTranslated,
                  int[] videoSize) {
        this.display = display;
        this.isTranslated = isTranslated;
        this.videoSize = videoSize;
    }

}

これは期待どおりに機能します。


ここで、2 つの整数値を次のような名前付きフィールドにマップする専用クラスに置き換えたいと思います。int[]VideoSize

public class VideoSize {

    public final int height;
    public final int width;

    public VideoSize(int width, int height) {
        this.height = height;
        this.width = width;
    }

}

これは、カスタム型アダプターまたは他の方法で可能ですか?

4

1 に答える 1

1

私はこのアダプターを思いつきました:

public class VideoSizeAdapter {

    @ToJson
    int[] toJson(VideoSize videoSize) {
        return new int[]{videoSize.width, videoSize.height};
    }

    @FromJson
    VideoSize fromJson(int[] dimensions) throws Exception {
        if (dimensions.length != 2) {
            throw new Exception("Expected 2 elements but was " + 
                Arrays.toString(dimensions));
        }
        int width = dimensions[0];
        int height = dimensions[1];
        return new VideoSize(width, height);
    }

}
于 2015-11-25T16:06:39.637 に答える