省略elementwrappers并获取xml根值

时间:2014-09-24 09:19:00

标签: c# xml xml-serialization xml-deserialization

<root xmlns:test="url" test:attr1="10" test:attr2="someValue>
    <elementwrapper>
        <secondElementwrapper>
            <element>someValue</element>
            <differentelement>anotherValue</differentelement>
        </secondElementwrapper>
    </elementwrapper>
</root>

制作以下课程:

public class XmlEntities
    {
        [XmlRoot("root")]

        public class Root
            {
                [XmlElement("elementwrapper")]
                public Elementwrapper Elementwrapper{ get; set; }
            }

        public class Elementwrapper
            {
                [XmlElement("secondElementwrapper")]
                public SecondElementwrapper SecondElementwrapper{ get; set; }
            }

        public class Values
            {
                [XmlElement("element")]
                public string Element{ get; set; }

                [XmlElement("differentelement")]
                public string Differentelement{ get; set; }
            }
    }

这是我序列化和反序列化xml的地方:

var reader = XmlReader.Create(url);
var xmlRecord = new XmlEntities.Root();

try
    {
        var serializer = new XmlSerializer(typeof(XmlEntities.Root));
        xmlRecord = (XmlEntities.Root)serializer.Deserialize(reader);

        reader.Close();
    }
catch (Exception e) { }
  • 我想访问xmlRecord.Element而不是xmlRecord.Elementwrapper.Values.Element
  • 我如何获得测试:attr1值?*

如果我删除了Elementwrapper和Root类,xmlRecord将返回null。 Root类中的[XmlAttribute]获取attr1值对我来说不起作用。

谢谢!

编辑: 该元素是一个错误的复制/粘贴。修正了。我还补充说:测试attr1面前,忘记了。

编辑: 在根类中添加以下提到的sgk,允许我访问属性

[XmlAttribute("attr1", Namespace = "url")]
public string attr { get; set; }
编辑:有没有办法以不同的方式映射类?所以我可以直接访问xmlRecord.Element吗?

编辑:@TonyStark看起来像我想要的东西需要以不同的方式接近,但是再次这已经有效我只需要通过节点访问元素(xmlRecord.elementwrapper.secondelementwrapper.element)对于那些想知道的人

要访问root的属性,我只需使用:xmlRecord.attr,我添加了上面写的xmlattribute。

1 个答案:

答案 0 :(得分:0)

  1. 我想访问xmlRecord.Element而不是xmlRecord.Elementwrapper.Values.Element - 根据您拥有的XML结构,Deserialize并访问<element>值和<differentelement>值 - 你需要通过root - &gt; elementwrapper - &gt; secondElementwrapper。
  2. 我如何获得attr1值? - 在类Root
  3. 中添加[XmlAttribute("attr1")]

    然后,[XmlElement("<elementwrapper>")]应为[XmlElement("elementwrapper")],否则当您Deserialize时,由于没有匹配的元素,您将始终为null。

    见下文

    public class XmlEntities
    {
        [XmlRoot("root")]
        public class Root
        {
            [XmlElement("elementwrapper")]
            public Elementwrapper Elementwrapper { get; set; }
    
            [XmlAttribute("attr1", Namespace="url")]
            public string attr1;
        }
    
        public class Elementwrapper
        {
            [XmlElement("secondElementwrapper")]
            public SecondElementwrapper SecondElementwrapper { get; set; }
        }
    
        public class SecondElementwrapper
        {
            [XmlElement("element")]
            public string Element { get; set; }
    
            [XmlElement("differentelement")]
            public string Differentelement { get; set; }
        }        
    }