簡體   English   中英

XmlSerialize Class 到 CDATA

[英]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數據 -

  1. 創建一個 class 來保存模塊詳細信息,如下所示 -

     public class Module { public string title { get; set; } public string code { get; set; } public string level { get; set; } public string summary { get; set; } }
  2. 創建一個方法來獲取這些數據 -

     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 ,您可以使用以下步驟 -

  1. 創建 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM