我目前正在开发.NET 4.6控制台应用程序。我尝试从文件中解析/序列化XML。
目前,我正在努力使用XML中的复杂类型进行序列化。
给出以下XML元素:
<cool_element>
<master visible="true">A1</master>
</cool_element>
以及它符合XSD规范:
<xs:element name="cool_element">
<xs:complexType>
<xs:sequence>
<xs:element name="master">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="visible"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
我在C#中的序列化类看起来像这样:
[XmlRoot(ElementName = "cool_element")]
public class CoolElement
{
[XmlElement("master")]
public string Master { get; set; }
}
这可以很好地检索字符串值。但我不知道如何从我的主元素中看到属性。
你对如何解决这个问题有所了解吗?
谢谢!
答案 0 :(得分:1)
master应该是它自己的对象类,我会这样解决它(注意xml属性的值和可见):
[XmlRoot(ElementName = "cool_element")]
public class CoolElement
{
private Master masterField;
public Master master { get { return this.masterField; } set { this.masterField = value; } }
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public class Master
{
private bool visibleField;
private string valueField;
[System.Xml.Serialization.XmlAttributeAttribute()]
public bool visible { get { return this.visibleField; } set { this.visibleField = value; } }
[System.Xml.Serialization.XmlTextAttribute()]
public string Value { get { return this.valueField; } set { this.valueField = value; } }
}
然后阅读数据:
CoolElement cool = null;
string path = @"yourxmlfilename.xml";
XmlSerializer serializer = new XmlSerializer(typeof(CoolElement));
using (var reader = XmlReader.Create(path))
{
cool = (CoolElement)serializer.Deserialize(reader);
Console.WriteLine("master value: " + cool.master.Value);
Console.WriteLine("attribute visible value: " + cool.master.visible);
}
这对你有帮助吗?