.NET Framework 提供豐富 XML 型別,但 WCF 需支援二進制、MTOM 等特殊編碼,故在 System.Runtime.Serialization.dll 定義三大核心型別:XmlDictionary、XmlDictionaryWriter、XmlDictionaryReader,專責 Message 序列化/編碼/解碼。
「我看了一部潛水艇電影」vs「我看了一部能在水面水下航行的容器電影」。雙方共享「潛水艇」定義,前者更簡潔。若對方不認識「elucubration」(苦思冥想),溝通即失敗。同理,訊息雙方必須擁有相容的 XmlDictionary 才能正確壓縮/解壓縮。
XmlDictionaryString:含 Int32 Key 與 String Value。Key 由 Add() 自動指派,不可手動設定。XmlDictionary dictionary = new XmlDictionary();
List<XmlDictionaryString> list = new List<XmlDictionaryString>();
list.Add(dictionary.Add("ReleaseDate"));
list.Add(dictionary.Add("GoodSongs"));
list.Add(dictionary.Add("Studio"));
// 檢視 Key 自動指派
foreach (var entry in list)
Console.WriteLine("Key = {0}, Value = {1}", entry.Key, entry.Value);
// 輸出:Key=0/ReleaseDate, Key=1/GoodSongs, Key=2/Studio
字典本身無公開集合存取,需自行保存 XmlDictionaryString 參考以供後續使用。
XmlBinaryWriterSession/XmlBinaryReaderSession 隨訊息帶外傳輸映射關係,解決預先共享困難,但增加協調複雜度與效能成本。下一節將探討 XmlDictionaryWriter 如何協調字典進行實際壓縮。