.NET XML序列化:命名空間前綴控制
.NET 提供兩種主要的 XML 序列化機制:DataContractSerializer
和 XmlSerializer
。然而,它們預設產生的命名空間前綴由內部機制管理,這限制了自訂前綴的需求。
利用 XmlSerializerNamespaces
若需控制命名空間別名,XmlSerializerNamespaces
類別是理想選擇。它允許明確指定序列化 XML 中特定命名空間的別名。
以下程式碼範例展示如何使用 XmlSerializerNamespaces
控制命名空間別名:
<code class="language-csharp">[XmlRoot("Node", Namespace = "https://www.php.cn/link/8f94eafb14366ce488946e40d8b4694e")] public class MyType { [XmlElement("childNode")] public string Value { get; set; } } static class Program { static void Main() { XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("myNamespace", "https://www.php.cn/link/8f94eafb14366ce488946e40d8b4694e"); XmlSerializer xser = new XmlSerializer(typeof(MyType)); xser.Serialize(Console.Out, new MyType(), ns); } }</code>
此程式碼將別名 "myNamespace" 賦予 "https://www.php.cn/link/8f94eafb14366ce488946e40d8b4694e" 命名空間。序列化後的 XML 輸出如下:
<code class="language-xml"><node xmlns:mynamespace="https://www.php.cn/link/8f94eafb14366ce488946e40d8b4694e"><childnode>something in here</childnode></node></code>
使用 XmlAttributeOverrides
運行時動態變更命名空間,可以使用 XmlAttributeOverrides
類別。它允許覆蓋特定類型屬性的預設命名空間設定。
例如,以下程式碼示範如何使用 XmlAttributeOverrides
變更命名空間:
<code class="language-csharp">XmlAttributeOverrides ovrd = new XmlAttributeOverrides(); ovrd.Add(typeof(MyType), "childNode", new XmlAttributeOverrides() { { typeof(XmlElementAttribute), new XmlElementAttribute("childNode", "https://www.php.cn/link/bb01f00daaeac676313d2031dfd1e419") } }); XmlSerializer xser = new XmlSerializer(typeof(MyType), ovrd); xser.Serialize(Console.Out, new MyType());</code>
此程式碼覆寫了 childNode
屬性的預設命名空間,將其指向 "https://www.php.cn/link/bb01f00daaeac676313d2031dfd1e419"。
以上是如何控制 .NET XML 序列化中的命名空間前綴?的詳細內容。更多資訊請關注PHP中文網其他相關文章!