XStream 將 Java 對象序列化為 XML 時,會將屬性名中的單下劃線 _ 轉換為雙下劃線 __。許多開發者誤以為是 Bug,實則是 XStream 默認的命名編碼策略導致。
查看源碼可見,XStream 內部使用 XmlFriendlyNameCoder 對名稱進行編碼,將 _ 替換為 __ 以避免 XML 命名衝突。
實例化 XStream 時傳入 NoNameCoder,禁用默認編碼,保持屬性名原樣輸出。
public static void main(String[] args) {
XStream xs = new XStream(new Xpp3Driver(new NoNameCoder()));
Bean b = new Bean();
System.out.println(xs.toXML(b));
}
<user_name> → <user__name>NoNameCoder:<user_name> 保持不變此方案簡潔高效,適用於所有屬性名包含下劃線的場景。