我正在尝试使用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; }
}
字段没有任何唯一标识符,并且所有元素中都有很多字段。我真的很感激任何帮助。
提前致谢。
答案 0 :(得分:0)
在A_el类中创建Field [] Fields成员以及具有Hint,Title和Value成员的相应Field类。
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粘贴为类&#39;。
”的选项