【问题标题】:How to define a string array element to a cdata node in xml x#如何在 xml x# 中将字符串数组元素定义到 cdata 节点
【发布时间】:2020-02-06 19:20:49
【问题描述】:

我需要将一个类序列化为 XML,看起来像

<Dummy>
  <Definition>
  </Definition>
  <Example><![CDATA[0401010101010101]]></Example>
  <Example><![CDATA[0401010101010101]]></Example>
  <Example><![CDATA[0401010101010101]]></Example>      
</Dummy>

“示例”节点的数量可以从 3 个节点到 n 个节点不等。所以我需要在我的 xml 类中将它定义为一个字符串数组。我的班级应该是什么样子???

我在网上看到一个字符串的例子:

[XmlIgnore]
public string Example { get; set; }

[XmlElement("Example")]
public System.Xml.XmlCDataSection MyStringCDATA
{
    get
    {
        return new System.Xml.XmlDocument().CreateCDataSection(Example);
    }
    set
    {
        Example = value.Value;
    }
}

但我有一个字符串数组。

我如何定义它?

【问题讨论】:

    标签: c# xml class serialization cdata


    【解决方案1】:

    这是您需要在字符串列表(示例)中阅读的唯一类。

    [XmlRoot(ElementName = "Dummy")]
    public class Dummy
    {
        [XmlElement(ElementName = "Definition")]
        public string Definition { get; set; }
        [XmlElement(ElementName = "Example")]
        public List<string> Example { get; set; }
    }
    

    用法:

    XmlSerializer serializer = new XmlSerializer(typeof(Dummy));
    Dummy obj = (Dummy)serializer.Deserialize(new StreamReader(filename));
    List<string> examples = obj.Example;
    examples.ForEach(x => Console.WriteLine(x));
    

    输出

    0401010101010101
    0401010101010101
    0401010101010101
    

    备用

    如果您希望获得示例中的全部值,则必须执行类似的操作。其背后的原因是值被 包围,这使值成为一个元素(没有结束标记)。

    XDocument xdoc = XDocument.Parse(xmlString);
    var objects = xdoc.Root.Elements().Where(x => x.Name.ToString().Equals("Example")).ToList();
    objects.ForEach(x => Console.WriteLine(x.FirstNode.ToString()));
    

    产生以下输出:

    <![CDATA[0401010101010101]]>
    <![CDATA[0401010101010101]]>
    <![CDATA[0401010101010101]]>
    

    【讨论】:

    • 您好,我需要对其进行序列化/反序列化。我不想使用 XDocument 。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2014-08-03
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多