نگاشت دیتای XML به کمک AutoMapper
نویسنده: محمد صاحب
تاریخ: ۱۳۹۱/۰۷/۱۴ ۱۳:۲۱
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class PreciousMetal
{
public string Name { get; set; }
public float Price { get; set; }
public DateTime UpdateTime { get; set; }
}
<pricelist currency="usd"> <price timestamp="1349347920" per="ozt" commodity="gold">1788.70</price> <price timestamp="1349347860" per="ozt" commodity="palladium">665.50</price> <price timestamp="1349347920" per="ozt" commodity="platinum">1701.25</price> <price timestamp="1349347920" per="ozt" commodity="silver">34.91</price> </pricelist>
Mapper.CreateMap<XElement, PreciousMetal>().ForMember(des => des.Price,
op =>
op.MapFrom(src => src.Value));
public class UnixTimestampResolver : ValueResolver<XElement, DateTime>
{
protected override DateTime ResolveCore(XElement source)
{
var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return origin.AddSeconds(Convert.ToDouble(source.Attribute("timestamp").Value));
}
}
public class EnglishPMetalToFarsiResolver : ValueResolver<XElement, string>
{
readonly Dictionary<string, string> _pMetaldic = new Dictionary<string, string>
{
{"gold", "طلا"},
{"palladium", "پالادیوم"},
{"platinum", "پلاتین "},
{"silver", "نقره"}
};
protected override string ResolveCore(XElement source)
{
string pMetalFarsi;
return _pMetaldic.TryGetValue(source.Attribute("commodity").Value, out pMetalFarsi) ? pMetalFarsi : string.Empty;
}
}
static void Main(string[] args)
{
//تعریف نگاشتها Mapper.CreateMap<XElement, PreciousMetal>().ForMember(des => des.Name,
op => op.ResolveUsing<EnglishPMetalToFarsiResolver>())
.ForMember(des => des.Price,
op =>
op.MapFrom(src => src.Value))
.ForMember(des => des.UpdateTime, op => op.ResolveUsing<UnixTimestampResolver>());
Mapper.AssertConfigurationIsValid();
//دریافت قیمتها از منبع داده
var doc = XDocument.Load("http://www.xmlcharts.com/cache/precious-metals.xml");
var priceData = doc.Descendants("pricelist").Take(1).Elements("price");
//فراخوانی نگاشت
var preciousMetals = Mapper.Map<IEnumerable<XElement>, IList<PreciousMetal>>(priceData);
foreach (var preciousMetal in preciousMetals)
{
Console.WriteLine(preciousMetal.Name + " " + preciousMetal.Price + " " + preciousMetal.UpdateTime.ToShortDateString());
}
Console.ReadLine();
}