1 回答

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
嗯……這很有趣,因?yàn)閠ransient關(guān)鍵字應(yīng)該可以解決問(wèn)題。但是..這只是一個(gè)常見(jiàn)用例的捷徑。如果處理序列化過(guò)程的庫(kù)或代碼忽略它,它可能不起作用。
有一篇很好的文章,涵蓋了 JAVA 中的序列化主題(閱讀本文)。簡(jiǎn)而言之:您可以自定義ExclusionStrategy以向您的班級(jí)添加專用行為
代碼亮點(diǎn):
ExclusionStrategy strategy = new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes field) {
if (field.getDeclaringClass() == MyClass.class && field.getName().equals("other")) {
return true;
}
if (field.getDeclaringClass() == MySubClass.class && field.getName().equals("otherVerboseInfo")) {
return true;
}
return false;
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
};
Gson gson = new GsonBuilder()
.addSerializationExclusionStrategy(strategy)
.create();
String jsonString = gson.toJson(source);
assertEquals(expectedResult, jsonString);
是的..這可能對(duì)您的問(wèn)題來(lái)說(shuō)有點(diǎn)矯枉過(guò)正,但它應(yīng)該適用于所有用例
添加回答
舉報(bào)