XmlSerializer を使用して文字列を CDATA にシリアル化します
XmlSerializer for .NET では、属性を使用して文字列を CDATA にシリアル化できますか?
解決策:
.NET の XmlSerializer クラスでは、プロパティを使用した CDATA シリアル化を直接許可しません。ただし、XmlIgnore プロパティとカスタム プロパティを組み合わせて使用すると、目的の結果を得ることができます。
このアプローチを示すクラスの例を次に示します。
<code class="language-csharp">[Serializable] public class MyClass { public MyClass() { } [XmlIgnore] public string MyString { get; set; } [XmlElement("MyString")] public System.Xml.XmlCDataSection MyStringCDATA { get { return new System.Xml.XmlDocument().CreateCDataSection(MyString); } set { MyString = value.Value; } } }</code>
このカスタム クラスでは、XmlIgnore 属性を使用して、MyString プロパティをシリアル化から除外します。代わりに、新しい MyStringCDATA プロパティが定義され、必要な文字列をカプセル化する System.Xml.XmlCDataSection オブジェクトが返されます。これにより、追加の属性を必要とせずに CDATA のシリアル化が可能になります。
使用法:
このメソッドを使用するには、MyClass インスタンスを作成し、MyString プロパティを設定して、XmlSerializer を使用してシリアル化します。
<code class="language-csharp">MyClass mc = new MyClass(); mc.MyString = "<test>Hello World</test>"; XmlSerializer serializer = new XmlSerializer(typeof(MyClass)); StringWriter writer = new StringWriter(); serializer.Serialize(writer, mc); Console.WriteLine(writer.ToString());</code>
出力:
これにより、次の XML 出力が生成されます:
<code class="language-xml"><?xml version="1.0" encoding="utf-16"?><myclass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><mystring><![CDATA[Hello World]]></mystring></myclass></code>
MyString 値は予想どおり CDATA セクションにラップされていることに注意してください。
以上が.NET XmlSerializer は属性を使用して文字列を CDATA としてシリアル化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。