.NET XML シリアル化: 名前空間プレフィックス制御
.NET は、DataContractSerializer
と XmlSerializer
という 2 つの主要な XML シリアル化メカニズムを提供します。ただし、デフォルトで生成された名前空間プレフィックスは内部メカニズムによって管理されるため、カスタム プレフィックスの必要性が制限されます。
XmlSerializerNamespace の使用
名前空間のエイリアスを制御する必要がある場合は、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>属性のデフォルトの名前空間をオーバーライドし、「
https://www.php.cn/link/bb01f00daaeac676313d2031dfd1e419childNode
」を指します。
以上が.NET XML シリアル化で名前空間プレフィックスを制御するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。