如何使用反序列化使用C#类读取xml属性 [英] how to read xml attribute using C# classes using deserialization

查看:62
本文介绍了如何使用反序列化使用C#类读取xml属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我的XML文件:

Below is My XML File :

<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>

下面是我的课程

#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

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

Below Lines of codes is how I am reading :

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));
                }

我需要做哪些修改,以便可以使用类或readind代码部分从First,Middle,Last Name读取属性值,即PropertyName,DisplayName,ListOrder?

What Modifications I have to do so that I can read Attribute values i.e PropertyName,DisplayName,ListOrder from First,Middle,Last Name using classes or the readind code part?

推荐答案

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

I think you are going to need another class to hold the 3 properties, and mark those properties with the XmlAttribute attribute

[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#类读取xml属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆