XmlSerialize Class 到 CDATA
XmlSerialize Class to CDATA
由于我们正在编写的接口之一,我们必须为 classes 的列表添加 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 的问题。
任何建议都会有所帮助。
获得您期望的输出的方法之一是 separate
创建 module
数据并生成 CDATA
部分。例如:
创建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
and for 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;
}
}
}
要测试输出,请在序列化期间分配步骤 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);
}
输出-
<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>
由于我们正在编写的接口之一,我们必须为 classes 的列表添加 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 的问题。 任何建议都会有所帮助。
获得您期望的输出的方法之一是 separate
创建 module
数据并生成 CDATA
部分。例如:
创建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
and forsimilar 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; } } }
要测试输出,请在序列化期间分配步骤 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);
}
输出-
<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>