0

这是 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 获取要反序列化的值。想要获取名称以及属性的值,但到目前为止还没有找到该方法的示例。

4

2 回答 2

2

您可以简单地更改string[] XAttributesXmlAttribute[] 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 无效,结束标签TestDatais TestElementthat won't work

<TestXML>
   <TestData attr1="MyAttr" attr2="1" DateAdded="">25</TestElement>
</TestXML>

它应该是

<TestXML>
   <TestData attr1="MyAttr" attr2="1" DateAdded="">25</TestData>
</TestXML>
于 2013-01-09T22:18:05.993 回答
0

未设置 value 属性,因为您需要将其定义为 XML 文本。试试这个:

public class IntegerValue() {
  [XmlText]
  public int value {get; set;}
  [XmlAnyAttribute]
  public string[] XAttributes {get; set;}
}

请注意,其 ac# 约定在属性装饰中不包含字符串“Attribute”。所以

于 2013-01-09T23:17:52.150 回答