首頁 > 後端開發 > C++ > 如何控制 .NET XML 序列化中的命名空間前綴?

如何控制 .NET XML 序列化中的命名空間前綴?

Barbara Streisand
發布: 2025-01-15 08:10:44
原創
270 人瀏覽過

How to Control Namespace Prefixes in .NET XML Serialization?

.NET XML序列化:命名空間前綴控制

.NET 提供兩種主要的 XML 序列化機制:DataContractSerializerXmlSerializer。然而,它們預設產生的命名空間前綴由內部機制管理,這限制了自訂前綴的需求。

利用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板