嘗試序列化物件而不產生過多的XML 命名空間宣告(例如xsi 和xsd )時,就會出現挑戰。預設情況下,序列化程序將這些命名空間注入產生的 XML 文件中。
請考慮以下演示問題的程式碼片段:
StringBuilder builder = new StringBuilder(); XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; using (XmlWriter xmlWriter = XmlWriter.Create(builder, settings)) { XmlSerializer s = new XmlSerializer(objectToSerialize.GetType()); s.Serialize(xmlWriter, objectToSerialize); }
產生的XML 文件將包含命名空間聲明:
<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns="urn:something"> ... </message>
為了消除這些不必要的命名空間聲明,必須使用自訂命名空間物件:
... XmlSerializer s = new XmlSerializer(objectToSerialize.GetType()); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("",""); s.Serialize(xmlWriter, objectToSerialize, ns);
透過利用XmlSerializerNamespaces類別並添加空字串作為鍵和值,可以覆蓋預設命名空間聲明並產生所需的輸出:
<message> ... </message>
以上是在 .NET 中序列化 XML 時如何自訂命名空間聲明?的詳細內容。更多資訊請關注PHP中文網其他相關文章!