C# XML シリアル化での名前空間プレフィックスのカスタマイズ
開発者は多くの場合、C# での XML シリアル化中に名前空間の処理を微調整する必要があります。 DataContractSerializer
と XmlSerializer
はどちらも名前空間をサポートしていますが、デフォルトのプレフィックス割り当てが特定のプロジェクトのニーズを常に満たしているとは限りません。
名前空間プレフィックスの指定
XmlSerializerNamespaces
クラスは、名前空間プレフィックスを制御するためのソリューションを提供します。 このクラスを使用すると、プレフィックスを名前空間 URI に明示的にマップできます。 これがイラストです:
<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 namespaces = new XmlSerializerNamespaces(); namespaces.Add("myNamespace", "https://www.php.cn/link/8f94eafb14366ce488946e40d8b4694e"); XmlSerializer serializer = new XmlSerializer(typeof(MyType)); serializer.Serialize(Console.Out, new MyType(), namespaces); } }</code>
このコードは MyType
を定義し、XML 属性を使用してそのルート要素と名前空間を指定します。 XmlSerializerNamespaces
インスタンスが作成され、「myNamespace」を「https://www.php.cn/link/8f94eafb14366ce488946e40d8b4694e」に関連付けます。 これを Serialize
メソッドに渡すと、シリアライザーがカスタム プレフィックスを使用するようになります。
ランタイム名前空間の変更
実行時の名前空間調整のために、XmlAttributeOverrides
クラスはクラスのデフォルトの XML 属性をオーバーライドする方法を提供します。 以下は、名前空間の動的な変更を示しています:
<code class="language-csharp">XmlAttributeOverrides overrides = new XmlAttributeOverrides(); overrides.Add(typeof(MyType), "Root", new XmlRootAttribute("Node") { Namespace = "https://www.php.cn/link/7cf68b210274ef46d38b0cd76e059af6" }); XmlSerializer serializer = new XmlSerializer(typeof(MyType), overrides); serializer.Serialize(Console.Out, new MyType(), namespaces);</code>
この例では、XmlAttributeOverrides
を使用して、実行時に MyType
の名前空間をシリアル化前に "https://www.php.cn/link/7cf68b210274ef46d38b0cd76e059af6" に変更します。
以上がC# XML シリアル化で名前空間プレフィックスを制御するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。