Search code examples
c#xmlc#-4.0xml-serialization

generate xml files based on my c# classes


i have xml file that i need to update each and every time as per new client requirement. most of the time xml is not proper because of manual updation of xml file. I am thinking to write a program (web/windows) where proper validation is provided. and based on the input from ui I will going to create xml file. below is my sample xml file.

<community>
  <author>xxx xxx</author>
  <communityid>000</communityid>
  <name>name of the community</name>

<addresses>
        <registeredaddress>
          <addressline1>xxx</addressline1>
          <addressline2>xxx</addressline2>
          <addressline3>xxx</addressline3>
          <city>xxx</city>
          <county>xx</county>
          <postcode>0000-000</postcode>
          <country>xxx</country>
        </registeredaddress>
        <tradingaddress>
          <addressline1>xxx</addressline1>
          <addressline2>xxx</addressline2>
          <addressline3>xxx</addressline3>
          <city>xxx</city>
          <county>xx</county>
          <postcode>0000-000</postcode>
          <country>xxx</country>
        </tradingaddress>
      </addresses>


<community>

can any one help me what will be the best approach for this?


Solution

  • Create following classes to hold your data and validate it:

    public class Community
    {
        public string Author { get; set; }
        public int CommunityId { get; set; }
        public string Name { get; set; }
        [XmlArray]
        [XmlArrayItem(typeof(RegisteredAddress))]
        [XmlArrayItem(typeof(TradingAddress))]
        public List<Address> Addresses { get; set; }
    }
    
    public class Address
    {
        private string _postCode;
    
        public string AddressLine1 { get; set; }
        public string AddressLine2 { get; set; }
        public string AddressLine3 { get; set; }
        public string City { get; set; }
        public string Country { get; set; }
    
        public string PostCode
        {
            get { return _postCode; }
            set {
                // validate post code e.g. with RegEx
                _postCode = value; 
            }
        }
    }
    
    public class RegisteredAddress : Address { }
    public class TradingAddress : Address { }
    

    And serialize that instance of community class to xml:

    Community community = new Community {
        Author = "xxx xxx",
        CommunityId = 0,
        Name = "name of community",
        Addresses = new List<Address> {
            new RegisteredAddress {
                AddressLine1 = "xxx",
                AddressLine2 = "xxx",
                AddressLine3 = "xxx",
                City = "xx",
                Country = "xxxx",
                PostCode = "0000-00"
            },
            new TradingAddress {
                AddressLine1 = "zz",
                AddressLine2 = "xxx"
            }
        }
    };
    
    XmlSerializer serializer = new XmlSerializer(typeof(Community));
    serializer.Serialize(File.Create("file.xml"), community);
    

    I think a little googling will help you to understand how to deserialize community object back from file.