c# - 如何使用反序列化使用 C# 类读取 xml 属性

标签 c# xml xml-deserialization xml-attribute

下面是我的 XML 文件:

<Visibilities>
    <Visibilities AppName="Test2">
      <Visibility DisplayName="Full Name">
        <FullName>
          <FirstName PropertyName="FullName.FirstName" DisplayName="First Name" ListOrder="3"></FirstName>
          <MiddleName PropertyName="FullName.MiddleName" DisplayName="Middle Name" ListOrder="2"></MiddleName>
          <LastName PropertyName="FullName.LastName" DisplayName="Last Name" ListOrder="1"></LastName>
        </FullName>
      </Visibility>
    </Visibilities>
  </Visibilities>

下面是我的类(class)

#region FullName
    [Serializable]
    public class FullName
    {
        private String strFirstName;
        [XmlElement("FirstName")]
        public String FirstName
        {
            get { return strFirstName; }
            set { strFirstName = value; }
        }

        private String strMiddleName;
        [XmlElement("MiddleName")]
        public String MiddleName
        {
            get { return strMiddleName; }
            set { strMiddleName = value; }
        }

        private String strLastName;
        [XmlElement("LastName")]
        public String LastName
        {
            get { return strLastName; }
            set { strLastName = value; }
        }

        [XmlElement("ListOrder")]
        public int ListOrder { get; set; }
    }
    #endregion

    #region Visibility
    [Serializable]
    public class Visibility
    {
        public FullName FullName { get; set; }

        [XmlAttribute("DisplayName")]
        public String DisplayName { get; set; }

    }
    #endregion

    #region Visibilities
    [Serializable]
    public class Visibilities
    {
        [XmlAttribute("AppName")]
        public String AppName { get; set; }

        [XmlElement("Visibility")]
        public List<Visibility> Visibility { get; set; }
    }
    #endregion

以下代码行是我阅读的方式:

foreach (Visibility vis in l.Visibility.ToList())
                {
                    Console.WriteLine(vis.DisplayName);
                    Console.WriteLine("{0}{1}", vis.FullName.FirstName, Reflect.GetPropValue<String>(cust, vis.FullName.FirstName));
                }

我必须做哪些修改才能使用类或读取代码部分从名字、中间名、姓氏读取属性值,即 PropertyName、DisplayName、ListOrder?

最佳答案

我认为您将需要另一个类来保存这 3 个属性,并使用 XmlAttribute 属性标记这些属性

[Serializable]
public class Name
{
    [XmlAttribute]
    public string PropertyName { get; set; }

     [XmlAttribute]
    public string DisplayName { get; set; }

     [XmlAttribute]
    public int ListOrder { get; set; }
}

[Serializable]
public class FullName
{
    private Name strFirstName;
    [XmlElement("FirstName")]
    public Name FirstName
    {
        get { return strFirstName; }
        set { strFirstName = value; }
    }

    private Name strMiddleName;
    [XmlElement("MiddleName")]
    public Name MiddleName
    {
        get { return strMiddleName; }
        set { strMiddleName = value; }
    }

    private Name strLastName;
    [XmlElement("LastName")]
    public Name LastName
    {
        get { return strLastName; }
        set { strLastName = value; }
    }

    [XmlElement("ListOrder")]
    public int ListOrder { get; set; }
}

[Serializable]
public class Visibility
{
    public FullName FullName { get; set; }

    [XmlAttribute("DisplayName")]
    public String DisplayName { get; set; }

}

[Serializable]
public class Visibilities
{
    [XmlAttribute("AppName")]
    public String AppName { get; set; }

    [XmlElement("Visibility")]
    public List<Visibility> Visibility { get; set; }
}

序列化:

<Visibilities>
  <Visibilities AppName="Test2">
    <Visibility DisplayName="Full Name">
      <FullName>
        <FirstName PropertyName="FullName.FirstName" DisplayName="First Name" ListOrder="3" />
        <MiddleName PropertyName="FullName.MiddleName" DisplayName="Middle Name" ListOrder="3" />
        <LastName PropertyName="FullName.LastName" DisplayName="Last Name" ListOrder="3" />
        <ListOrder>0</ListOrder>
      </FullName>
    </Visibility>
</Visibilities>

关于c# - 如何使用反序列化使用 C# 类读取 xml 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16632409/

相关文章:

c# - 将 XmlRoot 或 XmlType 与 RestSharp 结合使用

c# - 如何在 C# 和 C++ 之间进行互操作

regex - 结合删除标签正则表达式和删除 sed 中的空行 - Unix

java - createFault 的错误代码参数已传递 NULL - 使用 Metro 2.3

在元素名称和属性中使用多个命名空间的 C# XML 反序列化

c# - 无法将简单的 XML 解析为对象?

c# - 在 LINQ 查询中对基类使用扩展方法

c# - 创建和更新 UI 元素 Async Wpf

c# - 在 C# 中,如何将字节数组转换为十六进制数字字符串?

xml - 对大量 XML 文件进行版本控制