繁体   English   中英

使用XMLSerializer访问内部属性

[英]Access to inner attribute with XMLSerializer

我试图通过使用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成员,并创建一个具有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文件中,而不是粘贴,请从“编辑”菜单中选择“选择性粘贴”。 它将为您提供“将XML粘贴为类”的选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM