title: Best Practices for mapping one object to another
body: <p>My question is, what is the best way I can map one object to another in the most maintainable manner. I cannot change the way the Dto object that we are getting is setup to be more normalized so I need to create a way to map this to our implementation of their object.</p>
  
  <p>Here is example code to show what I need to happen:</p>
  
  <pre><code>class Program
  {
      static void Main(string[] args)
      {
          var dto = new Dto();
  
          dto.Items = new object[] { 1.00m, true, "Three" };
          dto.ItemsNames = new[] { "One", "Two", "Three" };            
  
          var model = GetModel(dto);
  
          Console.WriteLine("One: {0}", model.One);
          Console.WriteLine("Two: {0}", model.Two);
          Console.WriteLine("Three: {0}", model.Three);
          Console.ReadLine();
      }
  
      private static Model GetModel(Dto dto)
      {
          var result = new Model();
  
          result.One = Convert.ToDecimal(dto.Items[Array.IndexOf(dto.ItemsNames, "One")]);
          result.Two = Convert.ToBoolean(dto.Items[Array.IndexOf(dto.ItemsNames, "Two")]);
          result.Three = dto.Items[Array.IndexOf(dto.ItemsNames, "Three")].ToString();
  
          return result;
      }
  }
  
  class Dto
  {
      public object[] Items { get; set; }
      public string[] ItemsNames { get; set; }
  }
  
  class Model
  {
      public decimal One { get; set; }
      public bool Two { get; set; }
      public string Three { get; set; }
  }
  </code></pre>
  
  <p>I think what would be great is if I had some sort of mapper class that would take in the model objects propertyInfo, the type I want to convert to, and the "itemname" I want to pull out. Does anyone have any suggestions to make this cleaner?</p>
  
  <p>Thanks!</p>