使用XMLSerializer访问内部属性
本文关键字:属性 内部 访问 XMLSerializer 使用 | 更新日期: 2023-09-27 18:01:30
我试图通过使用XmlSerializer类序列化XML文件。Xml结构看起来像:
<?xml version="1.0"?>
<Datatable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Assets>
<A_elements>
<A_el ID="1">
<Fields>
<Field Hint="First field">
<Title> A_field </Title>
<Value> 111 </Value>
</Field>
<Field Hint="Second field">
<Title> B_field </Title>
<Value> 222 </Value>
</Field>
.....
.....
</Fields>
</A_el>
</A_elements>
</Assets>
</Datatable>
我怎么能访问字段值时,我指定[XmlElement(")]?
例如,我希望从这个xml中加载的c#对象可读为:LoadedObject.Assets.A_elements[0].A_field
,上面代码的输出应该是"111"
我正试着用这种方法解决这个问题:
[XmlRoot("Assets"), Serializable]
public class Assets
{
[XmlElement("A_elements")]
public Actors actors { get; set; }
}
public class A_elements
{
[XmlElement("A_elements")]
public List<A_el> A_elList { get; set; }
}
public class A_el
{
[XmlAttribute("ID")]
public int id { get; set; }
[------??????------]
public string A_field { get; set; }
}
字段没有任何唯一标识符,并且在所有元素中都有许多字段。我将非常感谢任何帮助。
在A_el类中创建一个Field[] Fields成员,并创建一个相应的Field类,该类具有Hint, Title和Value成员。
public class A_el
{
[System.Xml.Serialization.XmlAttribute("ID")]
public int id { get; set; }
[System.Xml.Serialization.XmlArray(ElementName = "Fields")]
[System.Xml.Serialization.XmlArrayItem("Field", typeof(Field))]
public Field[] Fields { get; set; }
private string[] _A_elements;
private string[] A_elements
{
get
{
if(null == _A_elements)
{
_A_elements = (from field in Fields select field.Value).ToArray();
}
return _A_elements;
}
}
}
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class Field
{
public string Title { get; set; }
public string Value { get; set; }
[System.Xml.Serialization.XmlAttributeAttribute()]
public string Hint { get; set; }
}
一个方便的提示:当你想从序列化构造c#对象时,在你的项目中添加一个cs文件并打开它。复制要序列化的XML,将光标放在cs文件中,而不是粘贴,而是从EDIT菜单中选择Paste Special。它会给你一个选项"粘贴XML为类"