using System;   using System.Collections.Generic;    using System.Linq;    using System.Text;    using System.Xml.Linq;    using System.Diagnostics;    using System.Threading;    using System.Xml;    using System.Reflection;  namespace XMLReading  {  class Program       {    static void Main(string[] args)            {  string fileName = @"C:\temp\t.xml";   List<EmergencyContactXMLDTO> emergencyContacts = new XmlReader<EmergencyContactXMLDTO, EmergencyContactXMLDTOMapper>().Read(fileName);  foreach (var item in emergencyContacts)               {    Console.WriteLine(item.FileNb);                }             }        }  public class XmlReader<TDTO, TMAPPER> where TDTO : BaseDTO, new() where TMAPPER : PCPWXMLDTOMapper, new()       {    public List<TDTO> Read(String fileName)            {    XmlTextReader reader = new XmlTextReader(fileName);    List<TDTO> emergencyContacts = new List<TDTO>();    while (true)                {                    TMAPPER mapper = new TMAPPER();    bool isFound = SeekElement(reader, mapper.GetMainXMLTagName());    if (!isFound) break;                    TDTO dto = new TDTO();    foreach (var propertyKey in mapper.GetPropertyXMLMap())                    {    String dtoPropertyName = propertyKey.Key;    String xmlPropertyName = propertyKey.Value;                        SeekElement(reader, xmlPropertyName);                        SetValue(dto, dtoPropertyName, reader.ReadElementString());                    }                    emergencyContacts.Add(dto);                }    return emergencyContacts;            }  private void SetValue(Object dto, String propertyName, String value)           {    PropertyInfo prop = dto.GetType().GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance);                prop.SetValue(dto, value, null);            }  private bool SeekElement(XmlTextReader reader, String elementName)           {    while (reader.Read())                {    XmlNodeType nodeType = reader.MoveToContent();    if (nodeType != XmlNodeType.Element)                    {    continue;                    }  if (reader.Name == elementName)                   {    return true;                    }                }    return false;            }        }  public class BaseDTO      {      }  public class EmergencyContactXMLDTO : BaseDTO       {  public string FileNb { get; set; }  public string ContactName { get; set; }  public string ContactPhoneNumber { get; set; }  public string Relationship { get; set; }  public string DoctorName { get; set; }  public string DoctorPhoneNumber { get; set; }  public string HospitalName { get; set; }      }  public interface PCPWXMLDTOMapper       {    Dictionary<string, string> GetPropertyXMLMap();    String GetMainXMLTagName();        }  public class EmergencyContactXMLDTOMapper : PCPWXMLDTOMapper       {    public Dictionary<string, string> GetPropertyXMLMap()            {    return new Dictionary<string, string>                {                    { "FileNb", "XFileNb" },                    { "ContactName", "XContactName"},                    { "ContactPhoneNumber", "XContactPhoneNumber" },                    { "Relationship", "XRelationship" },                    { "DoctorName", "XDoctorName" },                    { "DoctorPhoneNumber", "XDoctorPhoneNumber" },                    { "HospitalName", "XHospitalName" },                };            }  public String GetMainXMLTagName()           {    return "EmergencyContact";            }        }    }      
span.fullpost {display:none;}