这是XML示例,但使用不同的方法来定义属性:
<TestXML>
<TestData attr1="MyAttr" attr2="1" DateAdded="">25</TestData>
</TestXML>
现在我的课程定义:
public class TestXML() {
[XmlElement("TestData")]
public IntegerValue value {get; set;}
}
public class IntegerValue() {
public int value {get; set;}
[XmlAnyAttribute]
public string[] XAttributes {get; set;}
}
现在要反序列化的代码:
string xml = "<TestXML><TestData attr1=\"MyAttr\" attr2=\"1\" DateAdded=\"\">25</TestElement> </TestXML>"
using (StringReader sr = new StringReader(xml)) {
XmlSerializer serializer = new XmlSerializer(typeof(TestXML));
TestXML myxml = (TestXML)serializer.Deserialize(sr);
}
产生以下结果:
myxml
value | 0
XAttributes {string[7]}
[0] "MyAttr"
[1] "1"
[2] ""
xml格式正确。无法使用XMLAnyAttribute获取反序列化的值。想要获取名称以及属性的值,但到目前为止尚未找到该方法的示例。
答案 0 :(得分:2)
您只需将string[] XAttributes
更改为XmlAttribute[] XAttributes
这将返回整个属性,以便您可以访问名称和值
public class IntegerValue
{
public int value {get; set;}
[XmlAnyAttribute]
public XmlAttribute[] XAttributes { get; set; }
}
我的测试:
public class TestXML
{
[XmlElement("TestData")]
public IntegerValue value { get; set; }
}
public class IntegerValue
{
public int value { get; set; }
[XmlAnyAttribute]
public XmlAttribute[] XAttributes { get; set; }
}
XmlSerializer serializer = new XmlSerializer(typeof(TestXML));
using (FileStream stream = new FileStream(@"C:\StackOverflow.xml", FileMode.Open))
{
TestXML myxml = (TestXML)serializer.Deserialize(stream);
}
结果:
注意:您发布的xml无效,TestData
的结束标记为TestElement
无效
<TestXML>
<TestData attr1="MyAttr" attr2="1" DateAdded="">25</TestElement>
</TestXML>
应该是
<TestXML>
<TestData attr1="MyAttr" attr2="1" DateAdded="">25</TestData>
</TestXML>
答案 1 :(得分:0)
未设置value属性,因为您需要将其定义为XML文本。试试这个:
public class IntegerValue() {
[XmlText]
public int value {get; set;}
[XmlAnyAttribute]
public string[] XAttributes {get; set;}
}
注意,它的c#约定不包括属性修饰中的字符串'Attribute'。所以它