Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

how to read xml attribute using C# classes using deserialization

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>

Below are my classes

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

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

Serialized:

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...