Web 服務以 XML 為傳輸格式,資料型別在序列化/反序列化過程中跨平台映射,是互操作性成敗關鍵。本文為系列第二篇,剖析集合物件、含 null 陣列、基本型別精度與值/參考型別差異帶來的實戰問題。
.NET 將 ArrayList 映射為 xsd:ArrayOfAnyType(元素型別 xsd:anyType),Java 端產生 Object[] 而非具體 Product[],導致反序列化失敗或型別資訊遺失。
對策: 服務簽名僅公開具體型別陣列(如 Product[]),內部以集合處理,對外提供 Facade 方法轉換。
<item xsi:nil="true"/>""(長度 0),而非 null.NET 有 uint/ulong/ushort/ubyte 對應 xsd:unsignedInt 等,Java 無對應型別。
建議: 以 xsd:string 傳遞,雙端自行 Convert.ToString/Parse。
xsd:float/double/decimal 在兩平台精度實作不同,整合後必須實測驗證。
DateTime 為值型別,不可為 nullCalendar/Date 為參考型別,可為 nullJava 傳 null 給 .NET 會拋 FormatException。
解法: 以包裝複雜型別(如 DateWrapper)封裝,null 表達缺失。