問題タブ [moshi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
1598 参照

android - Moshi 1.5 で Kotlin を使用して KotlinJsonAdapterFactory() を使用すると Class Not Found Exception が発生する

私が直面している問題は少し奇妙です。レトロフィット 2 の responsebody モデルとして使用する通常のモデル クラスがある場合、予期しないエラーが発生するとします。

そしてデータクラスは

ClassNotFoundException を表示してコードがクラッシュし (デバッグ モードで実行しています)、KotlinJsonAdapterFactory() を削除してもクラッシュは発生しませんが、データ値が存在しなくなります。つまり、デバッグ モードでは、存在しないかのように表示されます。 Example のオブジェクトはトークン値のみを表示し、データはnullでも存在しませんが、注釈を使用するため、上記は単なる実験であるため、KotlinJsonAdapterFactory() が必要です。

私が見つけた唯一の解決策は、両方のクラスをデータクラスに変換することであり、完全に機能します(もちろん、RealmObject拡張を削除してRealmListを通常のリストにする必要があります)が、RealmObject()クラスを拡張する必要があり、データクラスを開くことができませんモデルの Realm db に必要です。

そこで、KotlinJsonAdapterFactory() を削除して 1.4 に戻しました。proguard のように見えた後でもすべてが機能するので、Moshi 1.5 にアップグレードするにはどうすればよいですか。

また、サンプル コードで何かを更新しました。データ オブジェクトは RealmList です。おそらく、応答が来たときにそれが無視された/存在しなかったのは、Moshi の RealmListAdapter が無視されたためだったのでしょうか???

moshi と retrofit インスタンスのスニペットを添付します

Moshi`インスタンス

レトロフィット インスタンス

0 投票する
2 に答える
2302 参照

json - Gson または Moshi: POJO のフィールドには 2 つのタイプがあり、いずれかのフィールドに保存する方法

編集:

これが私が持っているjson文字列です:

または、サーバーからの任意の json 文字列を使用できます。ここでのポイントは、動的な値を持つ可能性のある 1 つ以上のフィールドが存在する可能性があることです (この場合、field3 は文字列または整数にすることができます)。

次に、それらを任意の POJO にデシリアライズしたい

サーバーから送信された値が の場合、値Intを に設定したいということですfield3Int。の場合は、Stringに設定しfield3Stringます。

動的な値を持つ可能性があるこの種のフィールドを持つ他の POJO が存在する可能性があります。

Serj の回答に感謝しますが、実際の状況を示すために質問を編集した後も、TypeAdapter クラスで機能させることはできません。

ところで。これを Retrofit2 で次のように使用します。