[英]XmlSerialize Class to CDATA
由於我們正在編寫的接口之一,我們必須為類列表添加一個 CDATA 標記。
<modules>
<![CDATA[<module>
<title></title>
<code></code>
<level></level>
<year></year>
<summary></summary>
</module>
<module>
<title></title>
<code></code>
<level></level>
<year></year>
<summary></summary>
</module>]]>
</modules>
我不確定如何實現這一目標。 我發現了有關單個字符串的問題,但沒有發現整個 class 的問題。 任何的意見都將會有幫助。
獲得您期望的 output的方法之一是將module
數據的創建和生成CDATA
部分separate
。 例如:
要創建module
數據 -
創建一個 class 來保存模塊詳細信息,如下所示 -
public class Module { public string title { get; set; } public string code { get; set; } public string level { get; set; } public string summary { get; set; } }
創建一個方法來獲取這些數據 -
public static string CreateXMLString() { List<Module> modules = new List<Module>(); modules = new List<Module>() { new Module() { code = "test", summary="Test3", title="Test", level = "tests1" }, new Module() { code = "test3", summary="Test3", title="Test3", level = "tests3" } }; // Create XML to return the string in the format of // <module code="test"> // < level > tests1 </ level > // < summary > Test3 </ summary > // < title > Test </ title > //</ module >< module code = "test3" > // < level > tests3 </ level > // < summary > Test3 </ summary > // < title > Test3 </ title > // </ module > var modulesXml = from mod in modules select new XElement("module", new XAttribute("code", mod.code), new XElement("level", mod.level), new XElement("summary", mod.summary), new XElement("title", mod.title) ); return String.Concat(modulesXml); }
要獲取CDATA
,您可以使用以下步驟 -
創建 class Modules
並參考文檔以了解CreateCDataSection
的用法和similar threads here
以獲取詳細信息
[XmlType("")] public class Modules { public Modules() { } [XmlIgnore] public string Message { get; set; } [XmlElement("modules")] public System.Xml.XmlCDataSection MyStringCDATA { get { return new System.Xml.XmlDocument().CreateCDataSection(Message); } set { Message = value.Value; } } }
要測試 output 在序列化過程中分配步驟 2 中生成的字符串,您可以參考下面的示例代碼
static void Main(string[] args)
{
Modules mc = new Modules();
mc.Message = CreateXMLString();//Assign your data created in step 2
XmlSerializer serializer = new XmlSerializer(typeof(Modules));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
StringWriter writer = new StringWriter();
//Remove unnecessary namespaces
serializer.Serialize(writer, mc,ns);
var test = XDocument.Parse(writer.ToString());
var data = test.Root.Elements();
Console.WriteLine(data.FirstOrDefault().Value);
}
Output -
<modules>
<![CDATA[<module>
<code>test</code>
<level>tests1</level>
<summary>Test3</summary>
<title>Test</title>
</module><module>
<code>test3</code>
<level>tests3</level>
<summary>Test3</summary>
<title>Test3</title>
</module>]]>
</modules>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.