<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) { }
如果我删除了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。
答案 0 :(得分:0)
xmlRecord.Element
而不是xmlRecord.Elementwrapper.Values.Element
- 根据您拥有的XML结构,Deserialize
并访问<element>
值和<differentelement>
值 - 你需要通过root - &gt; elementwrapper - &gt; secondElementwrapper。[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; }
}
}