C#XML反序列化。将节点中的所有内部文本读入字符串属性

C#XML反序列化。将节点中的所有内部文本读入字符串属性,c#,xml,deserialization,C#,Xml,Deserialization,我目前正试图修改我的类,以便模型上的“我的文本”属性包含某个节点(text)节点的所有内部文本 给我带来问题的xml示例如下: <component> <section> <title>Reason for Visit</title> <text> <

我目前正试图修改我的类,以便模型上的“我的文本”属性包含某个节点(
text
)节点的所有内部文本

给我带来问题的xml示例如下:

            <component>
                <section>
                    <title>Reason for Visit</title>
                    <text>
                        <content ID="ID3EZZKACA">No Reason for Visit was given.</content>
                    </text>
                </section>
            </component>

因此,我目前正试图通过使用注释
[System.Xml.Serialization.XmlTextAttribute()]
来实现这一点。但是,当我这样做时,当Xml被反序列化时,文本属性总是以null形式出现。

正如我在评论中所说,从序列化开始通常更容易。对于上面的XML,下面是一些类

public sealed class component
{
    public section section { get; set; }
}
public sealed class section
{
    public string title { get; set; }
    public text text { get; set; }
}
public sealed class text
{
    public content content { get; set; }
}
public sealed class content
{
    public string text { get; set; }
    public string ID { get; set; }
}
然后,将内容类修改为:

然后,可以使用以下代码序列化实例:

        static string ToXmlString<T>(T t)
        {
            var serializer = new XmlSerializer(t.GetType());
            using (var sw = new System.IO.StringWriter())
            {
                serializer.Serialize(sw, t);
                return sw.ToString();
            }
        }
        static void Main(string[] args)
        {
            var c = new component { section = new section {
                            title = "Reason for Visit", text = new text { content = new content {
                            ID = "ID3EZZKACA", text = "No Reason for Visit was given." } } } };

            string s = ToXmlString(c);
            Console.WriteLine(s);
        }
静态字符串ToXmlString(T)
{
var serializer=新的XmlSerializer(t.GetType());
使用(var sw=new System.IO.StringWriter())
{
序列化器。序列化(sw,t);
返回sw.ToString();
}
}
静态void Main(字符串[]参数)
{
var c=新组件{section=新节{
title=“访问原因”,text=新文本{content=新内容{
ID=“ID3EZZKACA”,text=“没有给出访问的理由。”}}};
字符串s=字符串(c);
控制台。写入线(s);
}
结果是以下XML:

<?xml version="1.0" encoding="utf-16"?>
<component xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http
://www.w3.org/2001/XMLSchema">
  <section>
    <title>Reason for Visit</title>
    <text>
      <content ID="ID3EZZKACA">No Reason for Visit was given.</content>
    </text>
  </section>
</component>

访问原因
没有给出访问的理由。

使用XmlAnyElement属性并将文本属性定义为XmlElement

            [XmlAnyElement]
            public XmlElement text { get; set; }

这将导致文本元素的内容被加载到text属性中。

使用Linq2Xml
var elem=XDocument.Load(filename).XPathSelectElement(“//text”)
<?xml version="1.0" encoding="utf-16"?>
<component xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http
://www.w3.org/2001/XMLSchema">
  <section>
    <title>Reason for Visit</title>
    <text>
      <content ID="ID3EZZKACA">No Reason for Visit was given.</content>
    </text>
  </section>
</component>
            [XmlAnyElement]
            public XmlElement text { get; set; }