如何解决如何使用 XmlSerializer
我有一个 XML 文件,其中几乎所有的内部文本值都存储在 CDATA 中。现在我已经创建了一个应用程序,它能够使用 XmlReader 读取整个 XML 文档,将数据存储到特定的类中,调整数据,并最终创建一个包含我所有更改的新文档。这非常有效。
我似乎无法开始工作的唯一一件事是在 XmlText 元素上附加 CDATA 槽序列化。例如:
这是我的文本元素。并且它包含一个 XmlText 类型的属性 Text。
[XmlRoot(ElementName = "Text")]
public class Tekst
{
[XmlAttribute(AttributeName = "Lang")]
public string Lang { get; set; }
[XmlText]
public string Text { get; set; }
}
这是实现:
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("","");
Tekst tekst = new Tekst();
tekst.Text = "Hello world";
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Tekst));
using(XmlWriter writer = XmlWriter.Create("C:\\Users\\user_1\\Desktop\\test.xml"))
{
xmlSerializer.Serialize(writer,tekst,ns);
}
我的输出:
<?xml version="1.0" encoding="utf-8"?><Text>Hello world</Text>
我想要这样的输出:
<?xml version="1.0" encoding="utf-8"?><Text><![CDATA[Hello world]]</Text>
我尝试了各种解决方案,但似乎没有一个适用于 XmlText 节点类型。 我能够像这样转换 XmlElement 类型的其他元素(在:How do you serialize a string as CDATA using XmlSerializer? 上找到):
[XmlIgnore]
public string ExampleString{ get; set; }
[XmlElement(ElementName = "ExampleString")]
public XmlCDataSection ExampleStringCDATA
{
get
{
return new XmlDocument().CreateCDataSection(ExampleString);
}
set
{
ExampleString = value.Value;
}
}
任何帮助将不胜感激。谢谢!
更新 我发现将 CDATA 添加到每个文本值并不是必需的。需要读取这个 xml 文件的程序能够在没有 CDATA 的情况下读取它。所以我的程序现在可以运行了!
我仍然对解决方案感兴趣。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。