[{"data":1,"prerenderedAt":1375},["ShallowReactive",2],{"i-feather:search":3,"i-feather:x":8,"i-feather:moon":10,"i-feather:sun":12,"i-fa-brands:youtube":14,"i-fa-brands:twitch":18,"i-fa-brands:github":20,"i-fa-brands:linkedin":23,"i-fa-brands:stack-overflow":26,"i-simple-icons:bluesky":29,"i-fa-brands:mastodon":31,"i-fa-regular:envelope":33,"i-fa-solid:rss":35,"post-\u002Fa-simple-and-fast-object-mapper\u002F":37,"post-navigation":975,"i-fa-solid:share-alt":1355,"i-fa-brands:facebook":1357,"i-fa-brands:twitter":1359,"i-fa-brands:reddit":1361,"i-fa-brands:patreon":1363,"i-simple-icons:buymeacoffee":1365,"i-fa-brands:paypal":1367,"i-fa-regular:question-circle":1369,"i-feather:arrow-left":1371,"i-feather:arrow-right":1373},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"\u002F>\u003Cpath d=\"m21 21l-4.35-4.35\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M18 6L6 18M6 6l12 12\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 12.79A9 9 0 1 1 11.21 3A7 7 0 0 0 21 12.79\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"5\"\u002F>\u003Cpath d=\"M12 1v2m0 18v2M4.22 4.22l1.42 1.42m12.72 12.72l1.42 1.42M1 12h2m18 0h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":15,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":17},576,512,"\u003Cpath fill=\"currentColor\" d=\"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597c-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821c11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305m-317.51 213.508V175.185l142.739 81.205z\"\u002F>",{"left":4,"top":4,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":19},"\u003Cpath fill=\"currentColor\" d=\"M391.17 103.47h-38.63v109.7h38.63ZM285 103h-38.63v109.75H285ZM120.83 0L24.31 91.42v329.16h115.83V512l96.53-91.42h77.25L487.69 256V0Zm328.24 237.75l-77.22 73.12h-77.24l-67.6 64v-64h-86.87V36.58h308.93Z\"\u002F>",{"left":4,"top":4,"width":21,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":22},496,"\u003Cpath fill=\"currentColor\" d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6c-3.3.3-5.6-1.3-5.6-3.6c0-2 2.3-3.6 5.2-3.6c3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9c2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9c.3 2 2.9 3.3 5.9 2.6c2.9-.7 4.9-2.6 4.6-4.6c-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2c12.8 2.3 17.3-5.6 17.3-12.1c0-6.2-.3-40.4-.3-61.4c0 0-70 15-84.7-29.8c0 0-11.4-29.1-27.8-36.6c0 0-22.9-15.7 1.6-15.4c0 0 24.9 2 38.6 25.8c21.9 38.6 58.6 27.5 72.9 20.9c2.3-16 8.8-27.1 16-33.7c-55.9-6.2-112.3-14.3-112.3-110.5c0-27.5 7.6-41.3 23.6-58.9c-2.6-6.5-11.1-33.3 2.6-67.9c20.9-6.5 69 27 69 27c20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27c13.7 34.7 5.2 61.4 2.6 67.9c16 17.7 25.8 31.5 25.8 58.9c0 96.5-58.9 104.2-114.8 110.5c9.2 7.9 17 22.9 17 46.4c0 33.7-.3 75.4-.3 83.6c0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252C496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2c1.6 1.6 3.9 2.3 5.2 1c1.3-1 1-3.3-.7-5.2c-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9c1.6 1 3.6.7 4.3-.7c.7-1.3-.3-2.9-2.3-3.9c-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2c2.3 2.3 5.2 2.6 6.5 1c1.3-1.3.7-4.3-1.3-6.2c-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2c-1.4-2.3-4-3.3-5.6-2\"\u002F>",{"left":4,"top":4,"width":24,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":25},448,"\u003Cpath fill=\"currentColor\" d=\"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5c0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7c-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5c67.2 0 79.7 44.3 79.7 101.9z\"\u002F>",{"left":4,"top":4,"width":27,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":28},384,"\u003Cpath fill=\"currentColor\" d=\"M290.7 311L95 269.7L86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8l153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24l119.3 160.3l32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":30},"\u003Cpath fill=\"currentColor\" d=\"M5.202 2.857C7.954 4.922 10.913 9.11 12 11.358c1.087-2.247 4.046-6.436 6.798-8.501C20.783 1.366 24 .213 24 3.883c0 .732-.42 6.156-.667 7.037c-.856 3.061-3.978 3.842-6.755 3.37c4.854.826 6.089 3.562 3.422 6.299c-5.065 5.196-7.28-1.304-7.847-2.97c-.104-.305-.152-.448-.153-.327c0-.121-.05.022-.153.327c-.568 1.666-2.782 8.166-7.847 2.97c-2.667-2.737-1.432-5.473 3.422-6.3c-2.777.473-5.899-.308-6.755-3.369C.42 10.04 0 4.615 0 3.883c0-3.67 3.217-2.517 5.202-1.026\"\u002F>",{"left":4,"top":4,"width":24,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":32},"\u003Cpath fill=\"currentColor\" d=\"M433 179.11c0-97.2-63.71-125.7-63.71-125.7c-62.52-28.7-228.56-28.4-290.48 0c0 0-63.72 28.5-63.72 125.7c0 115.7-6.6 259.4 105.63 289.1c40.51 10.7 75.32 13 103.33 11.4c50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.5 102.5 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7c56.12-6.7 105-41.3 111.23-72.9c9.8-49.8 9-121.5 9-121.5m-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175c25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5l11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1c23.71 27.3 18.4 53 18.4 175z\"\u002F>",{"left":4,"top":4,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":34},"\u003Cpath fill=\"currentColor\" d=\"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48m0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49c-16.841 13.247-50.201 45.072-73.413 44.701c-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646c21.857 17.205 60.134 55.186 103.062 54.955c42.717.231 80.509-37.199 103.053-54.947c49.528-38.783 82.032-64.401 104.947-82.653V400z\"\u002F>",{"left":4,"top":4,"width":24,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":36},"\u003Cpath fill=\"currentColor\" d=\"M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041s64.04 28.673 64.04 64.041m175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018c111.832 7.284 201.473 96.702 208.772 208.772c.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79m144.249.288C439.596 229.677 251.465 40.445 16.503 32.01C7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999c191.179 7.839 344.627 161.316 352.465 352.465c.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504\"\u002F>",{"id":38,"title":39,"author":40,"body":41,"comments":760,"date":948,"dateModified":949,"description":950,"extension":951,"headings":952,"heroImage":964,"meta":965,"path":966,"permalink":966,"published":967,"stem":968,"tags":969,"timeToRead":974},"posts\u002Fposts\u002F2019\u002Fa-simple-and-fast-object-mapper\u002Findex.md","A Simple and Fast Object Mapper","Muhammad Rehan Saeed",{"type":42,"value":43,"toc":757},"minimark",[44,67,92,101,110,177,180,191,194,197,204,215,224,291,301,316,323,337,340,343,346,349,360,374,391,403,413,422,559,570,579,585,704,715,718,729,732,743,753],[45,46,47,48,58,59,63,64,66],"p",{},"I have a confession to make...I don't use ",[49,50,57],"a",{"href":51,"rel":52,"target":56},"https:\u002F\u002Fgithub.com\u002FAutoMapper\u002FAutoMapper",[53,54,55],"nofollow","noopener","noreferrer","_blank","Automapper",". For those who don't know Automapper is the number one object to object mapper library on NuGet by far. It takes properties from one object and copies them to another. I couldn't name the second place contender and looking on NuGet, nothing else comes close. This post talks about object mappers, why you ",[60,61,62],"strong",{},"might"," not want to use Automapper and introduces a faster, simpler object mapper that you ",[60,65,62],{}," want to use instead.",[68,69,71,91],"h1",{"id":70},"why-use-an-object-mapper",[72,73,76],"anchor-link",{"href":74,"label":75},"#why-use-an-object-mapper","Link to this section",[77,78,85],"svg",{"xmlns":79,"xmlns:xlink":80,"viewBox":81,"version":82,"width":83,"height":83,"aria-hidden":84},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","http:\u002F\u002Fwww.w3.org\u002F1999\u002Fxlink","0 0 16 16","1.1",22,"true",[86,87],"path",{"fill":88,"fill-rule":89,"d":90},"currentColor","evenodd","M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z","Why use an Object Mapper",[45,93,94,95,100],{},"This is a really good question. Most of the time, it boils down to using Entity Framework. Developers want to be good citizens and not expose their EF Core models in the API surface area because this can have really bad security implications (See overposting ",[49,96,99],{"href":97,"rel":98,"target":56},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Faspnet\u002Fmvc\u002Foverview\u002Fgetting-started\u002Fgetting-started-with-ef-using-mvc\u002Fimplementing-basic-crud-functionality-with-the-entity-framework-in-asp-net-mvc-application",[53,54,55],"here",").",[45,102,103,104,109],{},"I have received a lot of comments at this point in the conversation saying \"Why don't you use ",[49,105,108],{"href":106,"rel":107,"target":56},"https:\u002F\u002Fgithub.com\u002FStackExchange\u002FDapper",[53,54,55],"Dapper"," instead. Then you don't need model classes for your data layer, you can just go direct to your view model classes via Dapper\". Dapper is really great, don't get me wrong but it's not always the right tool for the job, there are distinct disadvantages to using Dapper instead of EF Core:",[111,112,113,123,126,141,149,152,174],"ol",{},[114,115,116,117,122],"li",{},"I have to write SQL. That's not so bad (You should learn SQL!) but it takes time to context switch and you often find yourself copying and pasting code back and forth from SQL Management Studio or ",[49,118,121],{"href":119,"rel":120,"target":56},"https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fsql\u002Fazure-data-studio\u002Fwhat-is?view=sql-server-2017",[53,54,55],"Azure Data Studio"," (I've started using it, you should too). It just makes development a bit slower, that's all.",[114,124,125],{},"EF Core can be run in-memory, making for very fast unit tests. With Dapper, I have to run functional tests against a real SQL Server database which is slow, brittle and a pain to setup. Before each test, you need to ensure the database is setup with just the right data, so your tests are repeatable, otherwise you end up with flaky tests. Don't underestimate the power of this point.",[114,127,128,129,134,135,140],{},"EF Core Migrations can automatically generate the database for me. With Dapper, I have to use external tools like Visual Studio Database Projects, ",[49,130,133],{"href":131,"rel":132,"target":56},"https:\u002F\u002Fdbup.github.io\u002F",[53,54,55],"DbUp"," or ",[49,136,139],{"href":137,"rel":138,"target":56},"https:\u002F\u002Fflywaydb.org\u002F",[53,54,55],"Flyway"," to create my database. That's an extra headache at deployment time. EF Core lets you cut out the extra time required to manage all of that.",[114,142,143,144,148],{},"EF Core Migrations can automatically handle database migrations for me. Migrating databases is hard! Keeping track of what state the database is in and making sure you've written the right ",[145,146,147],"code",{},"ALTER TABLE"," scripts is extra work that can be automated. EF Core handles all that for me. Alternatively, Visual Studio Database Projects can also get around this problem.",[114,150,151],{},"I can switch database provider easily. Ok...ok...nobody does this in the real world and I can only think of one case where this happened. People always mention this point though for some reason.",[114,153,154,155,158,159,162,163,158,166,169,170,173],{},"EF Core defaults to using the right data types, while on the other hand human beings...have too often chosen the wrong data types and then paid the penalties later on when the app is in production. Use ",[145,156,157],{},"NVARCHAR"," instead of ",[145,160,161],{},"VARCHAR"," and ",[145,164,165],{},"DATETIMEOFFSET",[145,167,168],{},"DATETIME2"," or even ",[145,171,172],{},"DATETIME"," people! I've seen professional database developers make these mistakes all the time. Automating this ensures that the correct decision is made all the time.",[114,175,176],{},"EF Core is not that much slower than using Dapper. We're not talking about orders of magnitude slower as it was with EF6. Throwing away all of the above benefits for slightly better speed is not a trade-off that everyone can make though, it depends on the app and situation.",[45,178,179],{},"You need to use the right tool for the right job. I personally use Dapper, where there is an existing database with all the migrations etc. already handled by external tools and use EF Core where I'm working with a brand new database.",[68,181,183,190],{"id":182},"what-is-good-about-automapper",[72,184,186],{"href":185,"label":75},"#what-is-good-about-automapper",[77,187,188],{"xmlns":79,"xmlns:xlink":80,"viewBox":81,"version":82,"width":83,"height":83,"aria-hidden":84},[86,189],{"fill":88,"fill-rule":89,"d":90},"What is good about Automapper?",[45,192,193],{},"Automapper is great when you have a small project that you want to throw together quickly and the objects you are mapping to and from have the same or similar property names and structure.",[45,195,196],{},"It's also great for unit testing because once you've written your mapper, testing it is just a matter of adding a one liner to test that all the properties in your object have a mapping setup for them.",[45,198,199,200,203],{},"Finally if you use Automapper with Entity Framework, you can use the ",[145,201,202],{},"ProjectTo"," method which uses the property mapping information to limit the number of fields pulled back from your database making the query a lot more efficient. I think this is probably the biggest selling point of Automapper. The alternative is to write your own Entity Framework Core projection.",[68,205,207,214],{"id":206},"what-is-wrong-with-automapper",[72,208,210],{"href":209,"label":75},"#what-is-wrong-with-automapper",[77,211,212],{"xmlns":79,"xmlns:xlink":80,"viewBox":81,"version":82,"width":83,"height":83,"aria-hidden":84},[86,213],{"fill":88,"fill-rule":89,"d":90},"What is wrong with Automapper?",[45,216,217,218,223],{},"Cezary Piatek writes a ",[49,219,222],{"href":220,"rel":221,"target":56},"https:\u002F\u002Fcezarypiatek.github.io\u002Fpost\u002Fwhy-i-dont-use-automapper\u002F",[53,54,55],"very good rundown"," of some of the problems when using Automapper. I'm not going to repeat what he says but here is a short description:",[111,225,226,229,232,235,271,274,277],{},[114,227,228],{},"In the real world, mapping between identical or similar classes is not that common.",[114,230,231],{},"If you have similar classes you are mapping between, there is no guarantee that they will not diverge, requiring you to write increasingly complex Automapper code or rewriting the mapping logic without Automapper.",[114,233,234],{},"Finding all usages of a property no longer works when using Automapper unless you explicitly map every property, lowering discoverability.",[114,236,237,252],{},[45,238,239,240,245,246,251],{},"If you have a complex scenario, ",[49,241,244],{"href":242,"rel":243,"target":56},"https:\u002F\u002Fjimmybogard.com\u002F",[53,54,55],"Jimmy Bogard"," (the author of the tool) ",[49,247,250],{"href":248,"rel":249,"target":56},"https:\u002F\u002Fjimmybogard.com\u002Fautomapper-usage-guidelines\u002F",[53,54,55],"suggests not using Automapper",":",[253,254,255,258,261],"ul",{},[114,256,257],{},"DO NOT use AutoMapper except in cases where the destination type is a flattened subset of properties of the source type.",[114,259,260],{},"DO NOT use AutoMapper to support a complex layered architecture.",[114,262,263,264,134,267,270],{},"AVOID using AutoMapper when you have a significant percentage of custom configuration in the form of ",[145,265,266],{},"Ignore",[145,268,269],{},"MapFrom",".",[114,272,273],{},"If you're mapping from database models to view models in an API, then dumping your database schema out as JSON makes for a bad API. You usually want more complex nested objects.",[114,275,276],{},"How much time does it really save? Object mapping code is the simplest code a developer can write, I can do it without thinking and knock a few mappings out in a couple of minutes.",[114,278,279,280,285,286,290],{},"Automapper is complex, it has a massive ",[49,281,284],{"href":282,"rel":283,"target":56},"https:\u002F\u002Fautomapper.readthedocs.io",[53,54,55],"documentation"," site just to show you how to use it and just checkout the 29 point list of ",[49,287,289],{"href":248,"rel":288,"target":56},[53,54,55],"guidelines"," on how to use it. Why should copying values from one object to another need to be so complex?",[68,292,294,39],{"id":293},"a-simple-and-fast-object-mapper",[72,295,297],{"href":296,"label":75},"#a-simple-and-fast-object-mapper",[77,298,299],{"xmlns":79,"xmlns:xlink":80,"viewBox":81,"version":82,"width":83,"height":83,"aria-hidden":84},[86,300],{"fill":88,"fill-rule":89,"d":90},[45,302,303,304,309,310,315],{},"I wrote an object mapper library that consists of a couple of interfaces and a handful of extension methods to make mapping objects slightly easier. The API is super simple and very light and thus fast. You can use the ",[49,305,308],{"href":306,"rel":307,"target":56},"https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FBoxed.Mapping\u002F",[53,54,55],"Boxed.Mapping"," NuGet package or look at the code at on GitHub in the ",[49,311,314],{"href":312,"rel":313,"target":56},"https:\u002F\u002Fgithub.com\u002FDotnet-Boxed\u002FFramework",[53,54,55],"Dotnet-Boxed\u002FFramework"," project. Lets look at an example. I want to map to and from instances of these two classes:",[317,318],"pre",{"className":319,"language":320,"meta":321,"style":321,"html":322},"language-cs shiki shiki-themes light-plus monokai","cs","","\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">public\u003C\u002Fspan>\u003Cspan class=\"s4J9F\"> class\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> MapFrom\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">{\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> bool\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> BooleanFrom\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> { \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">get\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">set\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> DateTimeOffset\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> DateTimeOffsetFrom\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> { \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">get\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">set\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> int\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> IntegerFrom\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> { \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">get\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">set\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> string\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> StringFrom\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> { \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">get\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">set\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">}\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan>\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">public\u003C\u002Fspan>\u003Cspan class=\"s4J9F\"> class\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> MapTo\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">{\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> bool\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> BooleanTo\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> { \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">get\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">set\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> DateTimeOffset\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> DateTimeOffsetTo\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> { \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">get\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">set\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> int\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> IntegerTo\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> { \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">get\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">set\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> string\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> StringTo\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> { \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">get\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; \u003C\u002Fspan>\u003Cspan class=\"s4J9F\">set\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">; }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">}\n\u003C\u002Fspan>\u003C\u002Fspan>",[45,324,325,326,329,330,333,334,270],{},"The implementation for an object mapper using the .NET Boxed Mapper is shown below. Note the ",[145,327,328],{},"IMapper"," interface which is the heart of the .NET Boxed Mapper. There is also an ",[145,331,332],{},"IAsyncMapper"," if for any reason you need to map between two objects asynchronously, the only difference being that it returns a ",[145,335,336],{},"Task",[317,338],{"className":319,"language":320,"meta":321,"style":321,"html":339},"\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">public\u003C\u002Fspan>\u003Cspan class=\"s4J9F\"> class\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> DemoMapper\u003C\u002Fspan>\u003Cspan class=\"sjLUg\"> : \u003C\u002Fspan>\u003Cspan class=\"sw29p\">IMapper\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">&lt;\u003C\u002Fspan>\u003Cspan class=\"sw29p\">MapFrom\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">, \u003C\u002Fspan>\u003Cspan class=\"sw29p\">MapTo\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">&gt;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">{\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> void\u003C\u002Fspan>\u003Cspan class=\"sWm5y\"> Map\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sw29p\">MapFrom\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> source\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">, \u003C\u002Fspan>\u003Cspan class=\"sw29p\">MapTo\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> destination\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">)\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    {\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">        destination\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">BooleanTo\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> source\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">BooleanFrom\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">        destination\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">DateTimeOffsetTo\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> source\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">DateTimeOffsetFrom\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">        destination\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">IntegerTo\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> source\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">IntegerFrom\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sFrd5\">        destination\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">StringTo\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> source\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">StringFrom\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">;\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    }\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">}\n\u003C\u002Fspan>\u003C\u002Fspan>",[45,341,342],{},"And here is an example of how you would actually map a single object, array or list:",[317,344],{"className":319,"language":320,"meta":321,"style":321,"html":345},"\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">public\u003C\u002Fspan>\u003Cspan class=\"s4J9F\"> class\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> UsageExample\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">{\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    private\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> readonly\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> IMapper\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> mapper\u003C\u002Fspan>\u003Cspan class=\"snCLD\"> =\u003C\u002Fspan>\u003Cspan class=\"sJvqV\"> new\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> DemoMapper\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">();\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    \n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> MapTo\u003C\u002Fspan>\u003Cspan class=\"sWm5y\"> MapOneObject\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sw29p\">MapFrom\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> source\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">) \u003C\u002Fspan>\u003Cspan class=\"snCLD\">=&gt;\u003C\u002Fspan>\u003Cspan class=\"sK46n\"> this\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">mapper\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">Map\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">source\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    \n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> MapTo\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">[] \u003C\u002Fspan>\u003Cspan class=\"sWm5y\">MapArray\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sw29p\">List\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> source\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">) \u003C\u002Fspan>\u003Cspan class=\"snCLD\">=&gt;\u003C\u002Fspan>\u003Cspan class=\"sK46n\"> this\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">mapper\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">MapArray\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">source\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">    \n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sJvqV\">    public\u003C\u002Fspan>\u003Cspan class=\"sw29p\"> List\u003C\u002Fspan>\u003Cspan class=\"sWm5y\"> MapList\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sw29p\">List\u003C\u002Fspan>\u003Cspan class=\"sFrd5\"> source\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">) \u003C\u002Fspan>\u003Cspan class=\"snCLD\">=&gt;\u003C\u002Fspan>\u003Cspan class=\"sK46n\"> this\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">mapper\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">.\u003C\u002Fspan>\u003Cspan class=\"sWm5y\">MapList\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">(\u003C\u002Fspan>\u003Cspan class=\"sFrd5\">source\u003C\u002Fspan>\u003Cspan class=\"sjLUg\">);\n\u003C\u002Fspan>\u003C\u002Fspan>\u003Cspan class=\"line\">\u003Cspan class=\"sjLUg\">}\n\u003C\u002Fspan>\u003C\u002Fspan>",[45,347,348],{},"I told you it was simple! Just a few convenience extension methods bundled together with an interface that makes it just ever so slightly quicker to write object mapping than rolling your own implementation. If you have more complex mappings, you can compose your mappers in the same way that your models are composed.",[68,350,352,359],{"id":351},"performance",[72,353,355],{"href":354,"label":75},"#performance",[77,356,357],{"xmlns":79,"xmlns:xlink":80,"viewBox":81,"version":82,"width":83,"height":83,"aria-hidden":84},[86,358],{"fill":88,"fill-rule":89,"d":90},"Performance",[45,361,362,363,368,369,373],{},"Keeping things simple makes the .NET Boxed Mapper fast. I put together some benchmarks using ",[49,364,367],{"href":365,"rel":366,"target":56},"https:\u002F\u002Fgithub.com\u002Fdotnet\u002FBenchmarkDotNet",[53,54,55],"Benchmark.NET"," which you can find ",[49,370,99],{"href":371,"rel":372,"target":56},"https:\u002F\u002Fgithub.com\u002FDotnet-Boxed\u002FFramework\u002Ftree\u002Fmain\u002FBenchmarks\u002FBoxed.Mapping.Benchmark",[53,54,55],". The baseline is hand written mapping code and I compare that to Automapper and the .NET Boxed Mapper.",[45,375,376,377,382,383,386,387,390],{},"I even got ",[49,378,381],{"href":379,"rel":380,"target":56},"https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F46500630\u002Fhow-to-improve-performance-of-c-sharp-object-mapping-code",[53,54,55],"a bit of help from the great Jon Skeet himself"," on how to improve the performance of instantiating an instance when using the generic ",[145,384,385],{},"new()"," constraint which it turns out is pretty slow because it uses ",[145,388,389],{},"Activator.CreateInstance"," under the hood.",[392,393,395,402],"h2",{"id":394},"object-to-object-mapping-benchmark",[72,396,398],{"href":397,"label":75},"#object-to-object-mapping-benchmark",[77,399,400],{"xmlns":79,"xmlns:xlink":80,"viewBox":81,"version":82,"width":83,"height":83,"aria-hidden":84},[86,401],{"fill":88,"fill-rule":89,"d":90},"Object to Object Mapping Benchmark",[45,404,405,406,408,409,412],{},"This benchmark measures the time taken to map from a ",[145,407,269],{}," object to the ",[145,410,411],{},"MapTo"," object which I show above.",[45,414,415],{},[416,417],"img",{"alt":418,"src":419,"width":420,"height":420,"loading":421},"Simple object to object mapping benchmark","\u002Fcontent-images\u002Fposts\u002F2019\u002Fa-simple-and-fast-object-mapper\u002Fimages\u002FBoxed.Mapping-Object-Benchmark-1024x1024.png",1024,"lazy",[423,424,425,451],"table",{},[426,427,428],"thead",{},[429,430,431,435,438,442,445,448],"tr",{},[432,433,434],"th",{},"Method",[432,436,437],{},"Runtime",[432,439,441],{"align":440},"right","Mean",[432,443,444],{"align":440},"Ratio",[432,446,447],{"align":440},"Gen 0\u002F1k Op",[432,449,450],{"align":440},"Allocated Memory\u002FOp",[452,453,454,475,492,510,526,542],"tbody",{},[429,455,456,460,463,466,469,472],{},[457,458,459],"td",{},"Baseline",[457,461,462],{},"Clr",[457,464,465],{"align":440},"7.877 ns",[457,467,468],{"align":440},"1.00",[457,470,471],{"align":440},"0.0178",[457,473,474],{"align":440},"56 B",[429,476,477,480,482,485,488,490],{},[457,478,479],{},"BoxedMapper",[457,481,462],{},[457,483,484],{"align":440},"25.431 ns",[457,486,487],{"align":440},"3.07",[457,489,471],{"align":440},[457,491,474],{"align":440},[429,493,494,496,498,501,504,507],{},[457,495,57],{},[457,497,462],{},[457,499,500],{"align":440},"264.934 ns",[457,502,503],{"align":440},"31.97",[457,505,506],{"align":440},"0.0277",[457,508,509],{"align":440},"88 B",[429,511,512,514,517,520,522,524],{},[457,513,459],{},[457,515,516],{},"Core",[457,518,519],{"align":440},"9.327 ns",[457,521,468],{"align":440},[457,523,471],{"align":440},[457,525,474],{"align":440},[429,527,528,530,532,535,538,540],{},[457,529,479],{},[457,531,516],{},[457,533,534],{"align":440},"17.174 ns",[457,536,537],{"align":440},"1.84",[457,539,471],{"align":440},[457,541,474],{"align":440},[429,543,544,546,548,551,554,557],{},[457,545,57],{},[457,547,516],{},[457,549,550],{"align":440},"158.218 ns",[457,552,553],{"align":440},"16.97",[457,555,556],{"align":440},"0.0279",[457,558,509],{"align":440},[392,560,562,569],{"id":561},"list-mapping-benchmark",[72,563,565],{"href":564,"label":75},"#list-mapping-benchmark",[77,566,567],{"xmlns":79,"xmlns:xlink":80,"viewBox":81,"version":82,"width":83,"height":83,"aria-hidden":84},[86,568],{"fill":88,"fill-rule":89,"d":90},"List Mapping Benchmark",[45,571,572,573,575,576,578],{},"This benchmark measures the time taken to map a List of ",[145,574,269],{}," objects to a list of ",[145,577,411],{}," objects.",[45,580,581],{},[416,582],{"alt":583,"src":584,"width":420,"height":420,"loading":421},"List to list mapping benchmark","\u002Fcontent-images\u002Fposts\u002F2019\u002Fa-simple-and-fast-object-mapper\u002Fimages\u002FBoxed.Mapping-List-Benchmark-1024x1024.png",[423,586,587,603],{},[426,588,589],{},[429,590,591,593,595,597,599,601],{},[432,592,434],{},[432,594,437],{},[432,596,441],{"align":440},[432,598,444],{"align":440},[432,600,447],{"align":440},[432,602,450],{"align":440},[452,604,605,622,639,657,672,688],{},[429,606,607,609,611,614,616,619],{},[457,608,459],{},[457,610,462],{},[457,612,613],{"align":440},"1.833 us",[457,615,468],{"align":440},[457,617,618],{"align":440},"2.0542",[457,620,621],{"align":440},"6.31 KB",[429,623,624,626,628,631,634,637],{},[457,625,479],{},[457,627,462],{},[457,629,630],{"align":440},"3.295 us",[457,632,633],{"align":440},"1.80",[457,635,636],{"align":440},"2.0523",[457,638,621],{"align":440},[429,640,641,643,645,648,651,654],{},[457,642,57],{},[457,644,462],{},[457,646,647],{"align":440},"10.569 us",[457,649,650],{"align":440},"5.77",[457,652,653],{"align":440},"2.4872",[457,655,656],{"align":440},"7.65 KB",[429,658,659,661,663,666,668,670],{},[457,660,459],{},[457,662,516],{},[457,664,665],{"align":440},"1.735 us",[457,667,468],{"align":440},[457,669,618],{"align":440},[457,671,621],{"align":440},[429,673,674,676,678,681,684,686],{},[457,675,479],{},[457,677,516],{},[457,679,680],{"align":440},"2.237 us",[457,682,683],{"align":440},"1.29",[457,685,636],{"align":440},[457,687,621],{"align":440},[429,689,690,692,694,697,700,702],{},[457,691,57],{},[457,693,516],{},[457,695,696],{"align":440},"3.220 us",[457,698,699],{"align":440},"1.86",[457,701,653],{"align":440},[457,703,656],{"align":440},[392,705,707,714],{"id":706},"speed",[72,708,710],{"href":709,"label":75},"#speed",[77,711,712],{"xmlns":79,"xmlns:xlink":80,"viewBox":81,"version":82,"width":83,"height":83,"aria-hidden":84},[86,713],{"fill":88,"fill-rule":89,"d":90},"Speed",[45,716,717],{},"It turns out that Automapper does a really good job on .NET Core in terms of speed but is quite a bit slower on .NET Framework. This is probably down to the intrinsic improvements in .NET Core itself. .NET Boxed is quite a bit faster than Automapper on .NET Framework but the difference on .NET Core is much less at around one and a half times. The .NET Boxed Mapper is also very close to the baseline but is a bit slower. I believe that this is due to the use of method calls on interfaces, whereas the baseline mapping code is only using method calls on concrete classes.",[392,719,721,728],{"id":720},"zero-allocations",[72,722,724],{"href":723,"label":75},"#zero-allocations",[77,725,726],{"xmlns":79,"xmlns:xlink":80,"viewBox":81,"version":82,"width":83,"height":83,"aria-hidden":84},[86,727],{"fill":88,"fill-rule":89,"d":90},"Zero Allocations",[45,730,731],{},".NET Boxed has zero allocations of memory while Automapper allocates a small amount per mapping. Since object mapping is a fairly common operation these small differences can add up over time and cause pauses in the app while the garbage collector cleans up the memory. There seems to be a trend I've seen in .NET for having zero allocation code. If you care about that, then this might help.",[68,733,735,742],{"id":734},"conclusions",[72,736,738],{"href":737,"label":75},"#conclusions",[77,739,740],{"xmlns":79,"xmlns:xlink":80,"viewBox":81,"version":82,"width":83,"height":83,"aria-hidden":84},[86,741],{"fill":88,"fill-rule":89,"d":90},"Conclusions",[45,744,745,746,309,749,752],{},"What I've tried to do with the .NET Boxed Mapper is fill a niche which I thought that Automapper was not quite filling. A super simple and fast object mapper that's just a couple of interfaces and extension methods to help you along the way and provide a skeleton on which to hang your code. If Automapper fits your app better, go ahead and use that. If you think it's useful, you can use the ",[49,747,308],{"href":306,"rel":748,"target":56},[53,54,55],[49,750,314],{"href":312,"rel":751,"target":56},[53,54,55]," project.",[754,755,756],"style",{},"html pre.shiki code .sJvqV, html code.shiki .sJvqV{--shiki-default:#0000FF;--shiki-dark:#F92672}html pre.shiki code .s4J9F, html code.shiki .s4J9F{--shiki-default:#0000FF;--shiki-default-font-style:inherit;--shiki-dark:#66D9EF;--shiki-dark-font-style:italic}html pre.shiki code .sw29p, html code.shiki .sw29p{--shiki-default:#267F99;--shiki-default-text-decoration:inherit;--shiki-dark:#A6E22E;--shiki-dark-text-decoration:underline}html pre.shiki code .sjLUg, html code.shiki .sjLUg{--shiki-default:#000000;--shiki-dark:#F8F8F2}html pre.shiki code .sFrd5, html code.shiki .sFrd5{--shiki-default:#001080;--shiki-dark:#F8F8F2}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sWm5y, html code.shiki .sWm5y{--shiki-default:#795E26;--shiki-dark:#A6E22E}html pre.shiki code .snCLD, html code.shiki .snCLD{--shiki-default:#000000;--shiki-dark:#F92672}html pre.shiki code .sK46n, html code.shiki .sK46n{--shiki-default:#0000FF;--shiki-dark:#FD971F}",{"title":321,"searchDepth":758,"depth":758,"links":759},2,[],{"issue":761,"comments":765},{"number":762,"title":763,"html_url":764},52,"[Comment] A Simple and Fast Object Mapper","https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52",[766,778,786,794,802,810,818,827,835,843,852,860,868,876,884,892,900,908,916,924,932,940],{"id":767,"html_url":768,"body_html":769,"created_at":770,"updated_at":770,"author_association":771,"user":772,"reactions":776},627233011,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233011","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F9619aa4b061c360ad4f84296834c7ef42b9bc48bde0acc9d0e1389aa49a078a3\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f30633061316635346162306130393131666439333161653565313961353930333f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Brent\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F9619aa4b061c360ad4f84296834c7ef42b9bc48bde0acc9d0e1389aa49a078a3\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f30633061316635346162306130393131666439333161653565313961353930333f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Brent\u003C\u002Fstrong> commented on \u003Cstrong>2019-03-06 17:45:04\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>What an incredibly well done post!  Than you!  Ok, I have a question.  Normally I presume that during testing, my IOC container or configuration will repoint my SQL Server connection to a more light-weight tool such as SQL CE or LocalDB.\u003Cbr \u002F>\nYou implied that providing sample data, for testing purposes, to SQL CE or LocalDB is difficult in comparison with using EF Core in-memory. Why is that so?\u003C\u002Fp>","2020-05-12T09:44:42Z","OWNER",{"login":773,"avatar_url":774,"html_url":775},"RehanSaeed","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F2270364?v=4","https:\u002F\u002Fgithub.com\u002FRehanSaeed",{"url":777,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233011\u002Freactions",{"id":779,"html_url":780,"body_html":781,"created_at":782,"updated_at":782,"author_association":771,"user":783,"reactions":784},627233069,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233069","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2019-03-06 18:42:33\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>What an incredibly well done post!  Than you!  Ok, I have a question.  Normally I presume that during testing, my IOC container or configuration will repoint my SQL Server connection to a more light-weight tool such as SQL CE or LocalDB.\u003Cbr \u002F>\nYou implied that providing sample data, for testing purposes, to SQL CE or LocalDB is difficult in comparison with using EF Core in-memory. Why is that so?\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Perhaps I could have been clearer. There are a few extra problems when you have to deal with a real database, as opposed to an in-memory database:\u003C\u002Fp>\n\u003Col>\n\u003Cli>You have to have a real SQL Server provisioned. This may be simple if we're talking about a developer machine but what about when we run the tests in a CI server? Do you pay for a server just for functional tests?\u003C\u002Fli>\n\u003Cli>You need to create the database, database schema and the user needed to connect to the database. You also might need to think about migrating the database (See next item).\u003C\u002Fli>\n\u003Cli>You could drop the database and recreate it after each test but that would be dreadfully slow. Instead you should probably look at a tool like \u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fgithub.com\u002Fjbogard\u002Frespawn\">Respawn\u003C\u002Fa> (Another great project by Jimmy Bogard) which clears the database instead making the test a lot quicker. The downside is that now you have to deal with migrations as I mention above.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Even after all this there are downsides. It will still be slower than an in-memory database, a lot more complicated and possibly more costly. On the upside, you have something that is a lot more real-world, so you may catch bugs that you wouldn't catch if you used an in-memory database.\u003C\u002Fp>","2020-05-12T09:44:49Z",{"login":773,"avatar_url":774,"html_url":775},{"url":785,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233069\u002Freactions",{"id":787,"html_url":788,"body_html":789,"created_at":790,"updated_at":790,"author_association":771,"user":791,"reactions":792},627233118,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233118","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F2d715bffc57a5b0b6698e40d70d92d033e697cd1dfef1a0dee066b0a834298f9\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f66656630373866373236393435316234343633306632643536663066326163633f733d393626643d6d6d26723d67\">\u003Cimg alt=\"James\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F2d715bffc57a5b0b6698e40d70d92d033e697cd1dfef1a0dee066b0a834298f9\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f66656630373866373236393435316234343633306632643536663066326163633f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>James\u003C\u002Fstrong> commented on \u003Cstrong>2019-03-12 14:48:03\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>This is great. I've been doing something very similar. What I would love to have is a VS extension or tool to autogenerate these mappings.\u003C\u002Fp>","2020-05-12T09:44:56Z",{"login":773,"avatar_url":774,"html_url":775},{"url":793,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233118\u002Freactions",{"id":795,"html_url":796,"body_html":797,"created_at":798,"updated_at":798,"author_association":771,"user":799,"reactions":800},627233163,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233163","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2019-03-12 16:02:50\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>This is great. I've been doing something very similar. What I would love to have is a VS extension or tool to autogenerate these mappings.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>That would be a nice extension!\u003C\u002Fp>","2020-05-12T09:45:03Z",{"login":773,"avatar_url":774,"html_url":775},{"url":801,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233163\u002Freactions",{"id":803,"html_url":804,"body_html":805,"created_at":806,"updated_at":806,"author_association":771,"user":807,"reactions":808},627233208,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233208","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Ffd3771a9b01693d2523fc4c6595b7fbb6c4958882531ca5b5709cb741802ad25\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f31353764386565633363373936373133366364633466373034373534363835663f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Jason\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Ffd3771a9b01693d2523fc4c6595b7fbb6c4958882531ca5b5709cb741802ad25\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f31353764386565633363373936373133366364633466373034373534363835663f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Fespressocoder.com\u002F\">Jason\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2019-03-28 12:57:40\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Great article and great work achieving these performance gains! I'm curious, what motivated you to create a new mapper when AutoMapper is essentially the de facto standard in this area? Did you run into performance issues with AutoMapper or were you generally just looking for something more light weight?\u003C\u002Fp>","2020-05-12T09:45:09Z",{"login":773,"avatar_url":774,"html_url":775},{"url":809,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233208\u002Freactions",{"id":811,"html_url":812,"body_html":813,"created_at":814,"updated_at":814,"author_association":771,"user":815,"reactions":816},627233282,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233282","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2019-03-28 13:06:33\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Great article and great work achieving these performance gains! I'm curious, what motivated you to create a new mapper when AutoMapper is essentially the de facto standard in this area? Did you run into performance issues with AutoMapper or were you generally just looking for something more light weight?\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>I used to use Automapper and always found little annoyances with it. I believe the latest version is much improved though. In the end, I just thought, this is way over engineered, I just want to map some properties and I can do that by hand in 30 seconds. It'll be boring but it'll work, be dead simple and fast. I then started to write an interface and a few extension methods to help me write mapping code quicker which resulted in this blog post.\u003C\u002Fp>","2020-05-12T09:45:16Z",{"login":773,"avatar_url":774,"html_url":775},{"url":817,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233282\u002Freactions",{"id":819,"html_url":820,"body_html":821,"created_at":822,"updated_at":823,"author_association":771,"user":824,"reactions":825},627233337,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233337","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F28d2b4f0fc5c916146bbbfa757be75d037d018b705541bb011fc2366b256f179\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f64373761626635333461326630353263326163656263653164663132636538633f733d393626643d6d6d26723d67\">\u003Cimg alt=\"ali\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F28d2b4f0fc5c916146bbbfa757be75d037d018b705541bb011fc2366b256f179\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f64373761626635333461326630353263326163656263653164663132636538633f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>ali\u003C\u002Fstrong> commented on \u003Cstrong>2019-04-06 06:44:49\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>hi rehan\u003Cbr \u002F>\nhow to resolve this problem when using boxed mapper and DI in my project?\u003Cbr \u002F>\nexample :\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Cspan>public\u003C\u002Fspan> \u003Cspan>interface\u003C\u002Fspan> \u003Cspan>IPrepareProduct\u003C\u002Fspan>\u003Cspan>&lt;\u003C\u002Fspan>\u003Cspan>TProduct\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan> \u003Cspan>TProductDto\u003C\u002Fspan>\u003Cspan>&gt;\u003C\u002Fspan>\u003Cspan>:\u003C\u002Fspan> \u003Cspan>IMapper\u003C\u002Fspan>\u003Cspan>&lt;\u003C\u002Fspan>\u003Cspan>TProduct\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan> \u003Cspan>TProductDto\u003C\u002Fspan>\u003Cspan>&gt;\u003C\u002Fspan> \n\u003Cspan>{\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\n\n\u003Cspan>public\u003C\u002Fspan> \u003Cspan>class\u003C\u002Fspan> \u003Cspan>PrepareProduct\u003C\u002Fspan> \u003Cspan>:\u003C\u002Fspan> \u003Cspan>IPrepareProduct\u003C\u002Fspan>\u003Cspan>&lt;\u003C\u002Fspan>\u003Cspan>Product\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan> \u003Cspan>ProductDto\u003C\u002Fspan>\u003Cspan>&gt;\u003C\u002Fspan>\n\u003Cspan>{\u003C\u002Fspan>\n    \u003Cspan>public\u003C\u002Fspan> \u003Cspan>void\u003C\u002Fspan> \u003Cspan>Map\u003C\u002Fspan>\u003Cspan>(\u003C\u002Fspan>\u003Cspan>Product\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan> \u003Cspan>ProductDto\u003C\u002Fspan> \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>)\u003C\u002Fspan>\n    \u003Cspan>{\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>CreatedOn\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>CreatedOn\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Description\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Description\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Name\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Name\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>FromDate\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>FromDate\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Id\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Id\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>InStockCount\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>InStockCount\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>OldPrice\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>OldPrice\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Price\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Price\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>PreViewText\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>PreViewText\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Published\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Published\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>SKU\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>SKU\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>ToDate\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>ToDate\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n    \u003Cspan>}\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\n\u003Cspan>\u002F*******************************\u002F\u003C\u002Fspan>\n\u003Cspan>public\u003C\u002Fspan> \u003Cspan>interface\u003C\u002Fspan> \u003Cspan>IPreparePicture\u003C\u002Fspan>\u003Cspan>:\u003C\u002Fspan>\u003Cspan>IMapper\u003C\u002Fspan>\u003Cspan>&lt;\u003C\u002Fspan>\u003Cspan>Picture\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan>\u003Cspan>PictureDto\u003C\u002Fspan>\u003Cspan>&gt;\u003C\u002Fspan>\n\u003Cspan>{\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\n\n\u003Cspan>public\u003C\u002Fspan> \u003Cspan>class\u003C\u002Fspan> \u003Cspan>PreparePicture\u003C\u002Fspan> \u003Cspan>:\u003C\u002Fspan> \u003Cspan>IMapper\u003C\u002Fspan>\u003Cspan>&lt;\u003C\u002Fspan>\u003Cspan>Picture\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan>\u003Cspan>PictureDto\u003C\u002Fspan>\u003Cspan>&gt;\u003C\u002Fspan>\n\u003Cspan>{\u003C\u002Fspan>\n    \u003Cspan>public\u003C\u002Fspan> \u003Cspan>void\u003C\u002Fspan> \u003Cspan>Map\u003C\u002Fspan>\u003Cspan>(\u003C\u002Fspan>\u003Cspan>Picture\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan> \u003Cspan>PictureDto\u003C\u002Fspan> \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>)\u003C\u002Fspan>\n    \u003Cspan>{\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Alt\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Alt\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>EntityId\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>EntityId\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>EntityName\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>EntityName\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>id\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>id\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>IsDefault\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>IsDefault\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Order\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Order\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Title\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Title\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Url\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Url\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n    \u003Cspan>}\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>","2020-05-12T09:45:24Z","2020-05-12T12:53:43Z",{"login":773,"avatar_url":774,"html_url":775},{"url":826,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233337\u002Freactions",{"id":828,"html_url":829,"body_html":830,"created_at":831,"updated_at":831,"author_association":771,"user":832,"reactions":833},627233403,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233403","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F28d2b4f0fc5c916146bbbfa757be75d037d018b705541bb011fc2366b256f179\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f64373761626635333461326630353263326163656263653164663132636538633f733d393626643d6d6d26723d67\">\u003Cimg alt=\"ali\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F28d2b4f0fc5c916146bbbfa757be75d037d018b705541bb011fc2366b256f179\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f64373761626635333461326630353263326163656263653164663132636538633f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>ali\u003C\u002Fstrong> commented on \u003Cstrong>2019-04-06 11:51:42\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>how to ignore some property  in your object mapper ?\u003C\u002Fp>","2020-05-12T09:45:32Z",{"login":773,"avatar_url":774,"html_url":775},{"url":834,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233403\u002Freactions",{"id":836,"html_url":837,"body_html":838,"created_at":839,"updated_at":839,"author_association":771,"user":840,"reactions":841},627233458,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233458","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2019-04-08 16:15:27\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>how to ignore some property  in your object mapper ?\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Just don't write the line of code that does the mapping i.e.\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>SomeProperty\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>SomeOtherProperty\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>","2020-05-12T09:45:39Z",{"login":773,"avatar_url":774,"html_url":775},{"url":842,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233458\u002Freactions",{"id":844,"html_url":845,"body_html":846,"created_at":847,"updated_at":848,"author_association":771,"user":849,"reactions":850},627233525,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233525","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2019-04-08 16:54:53\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>hi rehan\u003Cbr \u002F>\nhow to resolve this problem when using boxed mapper and DI in my project?\u003Cbr \u002F>\nexample :\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Cspan>public\u003C\u002Fspan> \u003Cspan>interface\u003C\u002Fspan> \u003Cspan>IPrepareProduct\u003C\u002Fspan>\u003Cspan>&lt;\u003C\u002Fspan>\u003Cspan>TProduct\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan> \u003Cspan>TProductDto\u003C\u002Fspan>\u003Cspan>&gt;\u003C\u002Fspan>\u003Cspan>:\u003C\u002Fspan> \u003Cspan>IMapper\u003C\u002Fspan>\u003Cspan>&lt;\u003C\u002Fspan>\u003Cspan>TProduct\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan> \u003Cspan>TProductDto\u003C\u002Fspan>\u003Cspan>&gt;\u003C\u002Fspan> \n\u003Cspan>{\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\n\n\u003Cspan>public\u003C\u002Fspan> \u003Cspan>class\u003C\u002Fspan> \u003Cspan>PrepareProduct\u003C\u002Fspan> \u003Cspan>:\u003C\u002Fspan> \u003Cspan>IPrepareProduct\u003C\u002Fspan>\u003Cspan>&lt;\u003C\u002Fspan>\u003Cspan>Product\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan> \u003Cspan>ProductDto\u003C\u002Fspan>\u003Cspan>&gt;\u003C\u002Fspan>\n\u003Cspan>{\u003C\u002Fspan>\n    \u003Cspan>public\u003C\u002Fspan> \u003Cspan>void\u003C\u002Fspan> \u003Cspan>Map\u003C\u002Fspan>\u003Cspan>(\u003C\u002Fspan>\u003Cspan>Product\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan> \u003Cspan>ProductDto\u003C\u002Fspan> \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>)\u003C\u002Fspan>\n    \u003Cspan>{\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>CreatedOn\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>CreatedOn\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Description\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Description\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Name\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Name\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>FromDate\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>FromDate\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Id\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Id\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>InStockCount\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>InStockCount\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>OldPrice\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>OldPrice\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Price\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Price\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>PreViewText\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>PreViewText\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Published\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Published\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>SKU\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>SKU\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>ToDate\u003C\u002Fspan>\u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>ToDate\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n    \u003Cspan>}\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\n\u003Cspan>\u002F*******************************\u002F\u003C\u002Fspan>\n\u003Cspan>public\u003C\u002Fspan> \u003Cspan>interface\u003C\u002Fspan> \u003Cspan>IPreparePicture\u003C\u002Fspan>\u003Cspan>:\u003C\u002Fspan>\u003Cspan>IMapper\u003C\u002Fspan>\u003Cspan>&lt;\u003C\u002Fspan>\u003Cspan>Picture\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan>\u003Cspan>PictureDto\u003C\u002Fspan>\u003Cspan>&gt;\u003C\u002Fspan>\n\u003Cspan>{\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\n\n\u003Cspan>public\u003C\u002Fspan> \u003Cspan>class\u003C\u002Fspan> \u003Cspan>PreparePicture\u003C\u002Fspan> \u003Cspan>:\u003C\u002Fspan> \u003Cspan>IMapper\u003C\u002Fspan>\u003Cspan>&lt;\u003C\u002Fspan>\u003Cspan>Picture\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan>\u003Cspan>PictureDto\u003C\u002Fspan>\u003Cspan>&gt;\u003C\u002Fspan>\n\u003Cspan>{\u003C\u002Fspan>\n    \u003Cspan>public\u003C\u002Fspan> \u003Cspan>void\u003C\u002Fspan> \u003Cspan>Map\u003C\u002Fspan>\u003Cspan>(\u003C\u002Fspan>\u003Cspan>Picture\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>,\u003C\u002Fspan> \u003Cspan>PictureDto\u003C\u002Fspan> \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>)\u003C\u002Fspan>\n    \u003Cspan>{\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Alt\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Alt\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>EntityId\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>EntityId\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>EntityName\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>EntityName\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>id\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>id\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>IsDefault\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>IsDefault\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Order\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Order\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Title\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Title\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n        \u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Url\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Url\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n    \u003Cspan>}\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003C\u002Fblockquote>\n\u003Cp>You have not outlined the problem. Also, please raise a GitHub issue to get better answers.\u003C\u002Fp>","2020-05-12T09:45:46Z","2020-05-12T12:54:18Z",{"login":773,"avatar_url":774,"html_url":775},{"url":851,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233525\u002Freactions",{"id":853,"html_url":854,"body_html":855,"created_at":856,"updated_at":856,"author_association":771,"user":857,"reactions":858},627233593,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233593","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fa24213c91e1ec17f83812a1af78645506482666c01976b7db62b8a852be6d7cb\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33306236396431633635613937623861356135356662653861346262363839313f733d393626643d6d6d26723d67\">\u003Cimg alt=\"David\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fa24213c91e1ec17f83812a1af78645506482666c01976b7db62b8a852be6d7cb\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33306236396431633635613937623861356135356662653861346262363839313f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>David\u003C\u002Fstrong> commented on \u003Cstrong>2019-08-07 14:32:46\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Hi Rehan,\u003C\u002Fp>\n\u003Cp>fan of your work, as always.. In this case, I am looking for any advantages using this approach, over say, DTO Writer, which will auto-generate mappings:\u003C\u002Fp>\n\u003Cp>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=VitaliiIlchenko.DtoCreator\">https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=VitaliiIlchenko.DtoCreator\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>This creates static methods for ToModel and FromModel.\u003C\u002Fp>\n\u003Cp>I admit to being a big fan of code generation.\u003C\u002Fp>\n\u003Cp>Perhaps I am missing something, as I have only spent an hour or so looking at this?\u003C\u002Fp>","2020-05-12T09:45:53Z",{"login":773,"avatar_url":774,"html_url":775},{"url":859,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233593\u002Freactions",{"id":861,"html_url":862,"body_html":863,"created_at":864,"updated_at":864,"author_association":771,"user":865,"reactions":866},627233662,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233662","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2019-08-07 15:02:18\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Hi Rehan,\u003C\u002Fp>\n\u003Cp>fan of your work, as always.. In this case, I am looking for any advantages using this approach, over say, DTO Writer, which will auto-generate mappings:\u003C\u002Fp>\n\u003Cp>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=VitaliiIlchenko.DtoCreator\">https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=VitaliiIlchenko.DtoCreator\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>This creates static methods for ToModel and FromModel.\u003C\u002Fp>\n\u003Cp>I admit to being a big fan of code generation.\u003C\u002Fp>\n\u003Cp>Perhaps I am missing something, as I have only spent an hour or so looking at this?\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Hi David,\u003C\u002Fp>\n\u003Cp>That's a really good question. This tool looks useful, I've not heard of it before but I've seen another one in the past. I've even thought about building my own once or twice. Questions I would have are:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Does it help when you want to edit a DTO to generate code for new properties you've added, removed, renamed or where you have changed the type?\u003C\u002Fli>\n\u003Cli>Does it handle more complex objects that are not just POCO's? Things like immutable types where the only way to create the object is from the constructor.\u003C\u002Fli>\n\u003Cli>Does it handle nested POCO's? This is pretty common.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Overall, it might get you started quickly but I'm not sure that it will be flexible enough. Also, one thing that I've never understood is the time saving factor. It really doesn't take long to write a mapper, unless maybe you have lots to do.\u003C\u002Fp>","2020-05-12T09:46:00Z",{"login":773,"avatar_url":774,"html_url":775},{"url":867,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233662\u002Freactions",{"id":869,"html_url":870,"body_html":871,"created_at":872,"updated_at":872,"author_association":771,"user":873,"reactions":874},627233725,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233725","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fa24213c91e1ec17f83812a1af78645506482666c01976b7db62b8a852be6d7cb\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33306236396431633635613937623861356135356662653861346262363839313f733d393626643d6d6d26723d67\">\u003Cimg alt=\"David\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fa24213c91e1ec17f83812a1af78645506482666c01976b7db62b8a852be6d7cb\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33306236396431633635613937623861356135356662653861346262363839313f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>David\u003C\u002Fstrong> commented on \u003Cstrong>2019-08-07 16:31:05\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Hi David,\u003C\u002Fp>\n\u003Cp>That's a really good question. This tool looks useful, I've not heard of it before but I've seen another one in the past. I've even thought about building my own once or twice. Questions I would have are:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Does it help when you want to edit a DTO to generate code for new properties you've added, removed, renamed or where you have changed the type?\u003C\u002Fli>\n\u003Cli>Does it handle more complex objects that are not just POCO's? Things like immutable types where the only way to create the object is from the constructor.\u003C\u002Fli>\n\u003Cli>Does it handle nested POCO's? This is pretty common.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Overall, it might get you started quickly but I'm not sure that it will be flexible enough. Also, one thing that I've never understood is the time saving factor. It really doesn't take long to write a mapper, unless maybe you have lots to do.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Rehan, actually a combination of DTO Writer and this would seem to match most needs:\u003C\u002Fp>\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fgithub.com\u002Fcezarypiatek\u002FMappingGenerator\">https:\u002F\u002Fgithub.com\u002Fcezarypiatek\u002FMappingGenerator\u003C\u002Fa>\u003C\u002Fp>","2020-05-12T09:46:06Z",{"login":773,"avatar_url":774,"html_url":775},{"url":875,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233725\u002Freactions",{"id":877,"html_url":878,"body_html":879,"created_at":880,"updated_at":880,"author_association":771,"user":881,"reactions":882},627233777,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233777","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fa24213c91e1ec17f83812a1af78645506482666c01976b7db62b8a852be6d7cb\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33306236396431633635613937623861356135356662653861346262363839313f733d393626643d6d6d26723d67\">\u003Cimg alt=\"David\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fa24213c91e1ec17f83812a1af78645506482666c01976b7db62b8a852be6d7cb\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33306236396431633635613937623861356135356662653861346262363839313f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>David\u003C\u002Fstrong> commented on \u003Cstrong>2019-08-07 16:50:23\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Rehan, actually a combination of DTO Writer and this would seem to match most needs:\u003C\u002Fp>\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fgithub.com\u002Fcezarypiatek\u002FMappingGenerator\">https:\u002F\u002Fgithub.com\u002Fcezarypiatek\u002FMappingGenerator\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>In my case, I very rarely only have a small number of classes to map, so generation saves a bit of time, and potentially errors when repetitively coding simple tasks.\u003C\u002Fp>\n\u003Cp>For adding properties or something more complex than one-to-one mapping, I would probably just do that by hand. These tend to be the exceptions, rather than the rule, and it is not worth attempting to automate complex logic...\u003C\u002Fp>\n\u003Cp>... unless someone else codes it for me ;-)\u003C\u002Fp>\n\u003Cp>David\u003C\u002Fp>","2020-05-12T09:46:14Z",{"login":773,"avatar_url":774,"html_url":775},{"url":883,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233777\u002Freactions",{"id":885,"html_url":886,"body_html":887,"created_at":888,"updated_at":888,"author_association":771,"user":889,"reactions":890},627233845,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233845","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Ff097400c6c5dfc7c8875fe8b13eada0ce24a7a1548fe3a34cf54405d1653d235\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f66626432386561353032333736356464313665616339383838343666633839373f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Ashish\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Ff097400c6c5dfc7c8875fe8b13eada0ce24a7a1548fe3a34cf54405d1653d235\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f66626432386561353032333736356464313665616339383838343666633839373f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Ashish\u003C\u002Fstrong> commented on \u003Cstrong>2019-09-03 10:04:54\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>How to manage different property name of entity ?\u003C\u002Fp>\n\u003Cp>Lets say I have an entity\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Cspan>public\u003C\u002Fspan> \u003Cspan>class\u003C\u002Fspan> \u003Cspan>person\u003C\u002Fspan>\n\u003Cspan>{\u003C\u002Fspan>\n    \u003Cspan>public\u003C\u002Fspan> \u003Cspan>string\u003C\u002Fspan> \u003Cspan>name\u003C\u002Fspan> \u003Cspan>{\u003C\u002Fspan>\u003Cspan>get\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003Cspan>set\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003Cspan>}\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\n\n\u003Cspan>public\u003C\u002Fspan> \u003Cspan>class\u003C\u002Fspan> \u003Cspan>personDTO\u003C\u002Fspan>\n\u003Cspan>{\u003C\u002Fspan>\n    \u003Cspan>public\u003C\u002Fspan> \u003Cspan>string\u003C\u002Fspan> \u003Cspan>personName\u003C\u002Fspan> \u003Cspan>{\u003C\u002Fspan>\u003Cspan>get\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003Cspan>set\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003Cspan>}\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>","2020-05-12T09:46:22Z",{"login":773,"avatar_url":774,"html_url":775},{"url":891,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233845\u002Freactions",{"id":893,"html_url":894,"body_html":895,"created_at":896,"updated_at":896,"author_association":771,"user":897,"reactions":898},627233899,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233899","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F6ad706c453dab442e7b598e43c83d54e5858da933163eb618f9788c39d45f031\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f62633637323630636130353764646632386333613363353133356230353837393f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Christopher\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F6ad706c453dab442e7b598e43c83d54e5858da933163eb618f9788c39d45f031\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f62633637323630636130353764646632386333613363353133356230353837393f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Christopher\u003C\u002Fstrong> commented on \u003Cstrong>2019-09-20 12:20:43\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>A more extensive example mapping a simple object hierarchy would be really helpful.\u003C\u002Fp>","2020-05-12T09:46:29Z",{"login":773,"avatar_url":774,"html_url":775},{"url":899,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233899\u002Freactions",{"id":901,"html_url":902,"body_html":903,"created_at":904,"updated_at":904,"author_association":771,"user":905,"reactions":906},627233949,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627233949","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2019-09-23 09:00:46\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>How to manage different property name of entity ?\u003C\u002Fp>\n\u003Cp>Lets say I have an entity\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Cspan>public\u003C\u002Fspan> \u003Cspan>class\u003C\u002Fspan> \u003Cspan>person\u003C\u002Fspan>\n\u003Cspan>{\u003C\u002Fspan>\n    \u003Cspan>public\u003C\u002Fspan> \u003Cspan>string\u003C\u002Fspan> \u003Cspan>name\u003C\u002Fspan> \u003Cspan>{\u003C\u002Fspan>\u003Cspan>get\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003Cspan>set\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003Cspan>}\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\n\n\u003Cspan>public\u003C\u002Fspan> \u003Cspan>class\u003C\u002Fspan> \u003Cspan>personDTO\u003C\u002Fspan>\n\u003Cspan>{\u003C\u002Fspan>\n    \u003Cspan>public\u003C\u002Fspan> \u003Cspan>string\u003C\u002Fspan> \u003Cspan>personName\u003C\u002Fspan> \u003Cspan>{\u003C\u002Fspan>\u003Cspan>get\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003Cspan>set\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003Cspan>}\u003C\u002Fspan>\n\u003Cspan>}\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003C\u002Fblockquote>\n\u003Cp>Easy:\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Cspan>destination\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Name\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>source\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>PersonName\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>","2020-05-12T09:46:35Z",{"login":773,"avatar_url":774,"html_url":775},{"url":907,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627233949\u002Freactions",{"id":909,"html_url":910,"body_html":911,"created_at":912,"updated_at":912,"author_association":771,"user":913,"reactions":914},627234014,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627234014","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2019-09-23 09:20:47\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>A more extensive example mapping a simple object hierarchy would be really helpful.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Here is a more extensive example:\u003C\u002Fp>\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fgithub.com\u002FDotnet-Boxed\u002FFramework\u002Fblob\u002Fmaster\u002FREADME.md\">https:\u002F\u002Fgithub.com\u002FDotnet-Boxed\u002FFramework\u002Fblob\u002Fmaster\u002FREADME.md\u003C\u002Fa>\u003C\u002Fp>","2020-05-12T09:46:42Z",{"login":773,"avatar_url":774,"html_url":775},{"url":915,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627234014\u002Freactions",{"id":917,"html_url":918,"body_html":919,"created_at":920,"updated_at":920,"author_association":771,"user":921,"reactions":922},627234077,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627234077","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F5ef23c9af205bdd767f65ee581be152dd196c788fc156291c4b7e3050aea4122\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33346161333738333430663565346436626661366431383136373239613039363f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Peter Morris\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F5ef23c9af205bdd767f65ee581be152dd196c788fc156291c4b7e3050aea4122\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f33346161333738333430663565346436626661366431383136373239613039363f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Fblazor-university.com\u002F\">Peter Morris\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2020-01-01 16:53:34\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>The problem with manually writing mappers is that you also have to manually write tests for them.\u003C\u002Fp>\n\u003Cp>That takes a lot of time. AutoMapper does it for us.\u003C\u002Fp>","2020-05-12T09:46:49Z",{"login":773,"avatar_url":774,"html_url":775},{"url":923,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627234077\u002Freactions",{"id":925,"html_url":926,"body_html":927,"created_at":928,"updated_at":928,"author_association":771,"user":929,"reactions":930},627234127,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627234127","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2020-01-01 17:03:30\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>The problem with manually writing mappers is that you also have to manually write tests for them.\u003C\u002Fp>\n\u003Cp>That takes a lot of time. AutoMapper does it for us.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>I don't think that code takes very long to write. You still have to write a test if you use Automapper. Docs suggest this:\u003C\u002Fp>\n\u003Cdiv>\u003Cpre>\u003Cspan>var\u003C\u002Fspan> \u003Cspan>config\u003C\u002Fspan> \u003Cspan>=\u003C\u002Fspan> \u003Cspan>AutoMapperConfiguration\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>Configure\u003C\u002Fspan>\u003Cspan>(\u003C\u002Fspan>\u003Cspan>)\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\n\u003Cspan>config\u003C\u002Fspan>\u003Cspan>.\u003C\u002Fspan>\u003Cspan>AssertConfigurationIsValid\u003C\u002Fspan>\u003Cspan>(\u003C\u002Fspan>\u003Cspan>)\u003C\u002Fspan>\u003Cspan>;\u003C\u002Fspan>\u003C\u002Fpre>\u003C\u002Fdiv>\n\u003Cp>It checks that every single member has a destination type. It may not be the right one (since there are always exceptional cases), but it at least tests that every property is copied from source to destination.\u003C\u002Fp>\n\u003Cp>There are pros and cons. Automapper still has it's uses.\u003C\u002Fp>","2020-05-12T09:46:56Z",{"login":773,"avatar_url":774,"html_url":775},{"url":931,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627234127\u002Freactions",{"id":933,"html_url":934,"body_html":935,"created_at":936,"updated_at":936,"author_association":771,"user":937,"reactions":938},627234186,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627234186","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fd5258bd1f42962771f65ee1f9c327f47d4723c5bb618895e270a13cdc2f3efef\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f63306437666139653138393962643337653239356230356464393462643562393f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Sam\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002Fd5258bd1f42962771f65ee1f9c327f47d4723c5bb618895e270a13cdc2f3efef\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f63306437666139653138393962643337653239356230356464393462643562393f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>Sam\u003C\u002Fstrong> commented on \u003Cstrong>2020-01-04 13:11:26\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>I like the direction you went with this.   We struggle back and forth with the same person points of automappers as you do.  Mostly property references.  I want to know what you consider different about your approach than manually mapping (I think you called this baseline)?   Yes you are creating a mapping framework with the interface but you are still manually writing the mapping.  I am not opposed to manually writing the mapping a because we do that now and it's the most performant, but isn't yours also manually mapping?  How is your benchmark time slower?\u003C\u002Fp>","2020-05-12T09:47:02Z",{"login":773,"avatar_url":774,"html_url":775},{"url":939,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627234186\u002Freactions",{"id":941,"html_url":942,"body_html":943,"created_at":944,"updated_at":944,"author_association":771,"user":945,"reactions":946},627234240,"https:\u002F\u002Fgithub.com\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002F52#issuecomment-627234240","\n\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow noopener noreferrer\" href=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\">\u003Cimg alt=\"Muhammad Rehan Saeed\" height=\"40\" width=\"40\" src=\"https:\u002F\u002Fcamo.githubusercontent.com\u002F8a07049df41b8a3839a3f4342f09ea8e6e7fa0065667687f04beca2d088a1dca\u002F68747470733a2f2f7777772e67726176617461722e636f6d2f6176617461722f32623266393030653361633066353535316462646537323864336262343935343f733d393626643d6d6d26723d67\" \u002F>\u003C\u002Fa> \u003Cstrong>\u003Ca rel=\"nofollow noopener noreferrer\" target=\"_blank\" href=\"https:\u002F\u002Frehansaeed.com\u002F\">Muhammad Rehan Saeed\u003C\u002Fa>\u003C\u002Fstrong> commented on \u003Cstrong>2020-01-04 14:04:54\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>I like the direction you went with this.   We struggle back and forth with the same person points of automappers as you do.  Mostly property references.  I want to know what you consider different about your approach than manually mapping (I think you called this baseline)?   Yes you are creating a mapping framework with the interface but you are still manually writing the mapping.  I am not opposed to manually writing the mapping a because we do that now and it's the most performant, but isn't yours also manually mapping?  How is your benchmark time slower?\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>It's really just a set of extension methods to make mapping easier and interfaces to standardise things so developers know what to expect. That's it. Just enough to make manually mapping more bearable and slightly faster to write.\u003C\u002Fp>\n\u003Cp>The time is mostly a bit slower because we use an interface and we also use a different method of newing up instances of types as opposed to the new keyword.\u003C\u002Fp>","2020-05-12T09:47:09Z",{"login":773,"avatar_url":774,"html_url":775},{"url":947,"total_count":4,"+1":4,"-1":4,"laugh":4,"hooray":4,"confused":4,"heart":4,"rocket":4,"eyes":4},"https:\u002F\u002Fapi.github.com\u002Frepos\u002FRehanSaeed\u002Frehansaeed.github.io\u002Fissues\u002Fcomments\u002F627234240\u002Freactions","2019-03-05T00:00:00+00:00",null,".NET Boxed mapper is an object to object mapper that is simpler and faster than Automapper and makes zero allocations of memory, thus making the garbage collector do less work.","md",[953,955,956,957,958,959,960,961,962,963],{"depth":954,"value":91},1,{"depth":954,"value":190},{"depth":954,"value":214},{"depth":954,"value":39},{"depth":954,"value":359},{"depth":758,"value":402},{"depth":758,"value":569},{"depth":758,"value":714},{"depth":758,"value":728},{"depth":954,"value":742},"\u002Fimages\u002Fhero\u002FDotnet-Boxed-1366x768.png",{},"\u002Fa-simple-and-fast-object-mapper\u002F",true,"posts\u002F2019\u002Fa-simple-and-fast-object-mapper\u002Findex",[970,971,57,972,973],".NET Boxed",".NET Core","Benchmarks","Entity Framework Core",9,[976,980,984,989,994,997,1000,1004,1008,1012,1015,1019,1024,1027,1030,1034,1038,1042,1045,1049,1053,1057,1060,1065,1070,1074,1077,1080,1083,1088,1092,1095,1100,1104,1108,1112,1115,1119,1123,1127,1131,1135,1139,1143,1146,1150,1154,1158,1162,1165,1169,1173,1176,1179,1183,1187,1191,1195,1199,1203,1207,1211,1215,1218,1221,1224,1228,1232,1235,1237,1240,1243,1246,1249,1253,1257,1258,1261,1265,1269,1272,1275,1278,1282,1286,1290,1294,1297,1300,1305,1308,1311,1315,1318,1322,1326,1329,1333,1336,1339,1343,1347,1351],{"title":977,"permalink":978,"heroImage":979,"timeToRead":954},"Just Start - The First Blog Post","\u002Fjust-start-the-first-blog-post\u002F","\u002Fimages\u002Fhero\u002FJust-Start-1366x768.png",{"title":981,"permalink":982,"heroImage":983,"timeToRead":758},"ConfigureAwait in Task Parallel Library (TPL)","\u002Fconfigureawait-task-parallel-library\u002F","\u002Fimages\u002Fhero\u002FMicrosoft-.NET-1366x768.png",{"title":985,"permalink":986,"heroImage":987,"timeToRead":988},"Stop The Brace Wars, Use StyleCop","\u002Fstop-brace-wars-use-stylecop\u002F","\u002Fimages\u002Fhero\u002FStyleCop-1366x768.png",3,{"title":990,"permalink":991,"heroImage":992,"timeToRead":993},"Reactive Extensions (Rx) - Part 1 - Replacing C# Events","\u002Freactive-extensions-part1-replacing-events\u002F","\u002Fimages\u002Fhero\u002FReactive-Extensions-1366x768.png",4,{"title":995,"permalink":996,"heroImage":992,"timeToRead":988},"Reactive Extensions (Rx) - Part 2 - Wrapping C# Events","\u002Freactive-extensions-part2-wrapping-events\u002F",{"title":998,"permalink":999,"heroImage":992,"timeToRead":758},"Reactive Extensions (Rx) - Part 3 - Naming Conventions","\u002Freactive-extensions-part3-naming-conventions\u002F",{"title":1001,"permalink":1002,"heroImage":1003,"timeToRead":988},"WPF Metro Part 1 - Modern UI for WPF","\u002Fwpf-metro-part1-modern-ui-for-wpf\u002F","\u002Fimages\u002Fhero\u002FModern-UI-for-WPF-1366x768.png",{"title":1005,"permalink":1006,"heroImage":1007,"timeToRead":988},"WPF Metro Part 2 - MahApps Metro","\u002Fwpf-metro-part2-mahapps-metro\u002F","\u002Fimages\u002Fhero\u002FMahApps-Metro-1366x768.png",{"title":1009,"permalink":1010,"heroImage":1011,"timeToRead":988},"Windows 8.1 TouchScreen Gaming Laptops","\u002Fwindows-8-touchscreen-gaming-laptops\u002F","\u002Fimages\u002Fhero\u002FFry-Shutup-And-Take-My-Money-1366x768.png",{"title":1013,"permalink":1014,"heroImage":992,"timeToRead":988},"Reactive Extensions (Rx) - Part 4 - Replacing Timers","\u002Freactive-extensions-part4-replacing-timers\u002F",{"title":1016,"permalink":1017,"heroImage":1018,"timeToRead":758},"WPF Metro Part 3 - Elysium","\u002Fwpf-metro-part3-elysium\u002F","\u002Fimages\u002Fhero\u002FElysium-1366x768.png",{"title":1020,"permalink":1021,"heroImage":1022,"timeToRead":1023},"WPF Metro Part 4 - Elysium Extra","\u002Fwpf-metro-part4-elysium-extra\u002F","\u002Fimages\u002Fhero\u002FElysium-Extra-1366x768.png",8,{"title":1025,"permalink":1026,"heroImage":992,"timeToRead":993},"Reactive Extensions (Rx) - Part 5 - Awaiting Observables","\u002Freactive-extensions-part5-awaiting-observables\u002F",{"title":1028,"permalink":1029,"heroImage":983,"timeToRead":1023},"GetHashCode Made Easy","\u002Fgethashcode-made-easy\u002F",{"title":1031,"permalink":1032,"heroImage":992,"timeToRead":1033},"Reactive Extensions (Rx) - Part 6 - Task ToObservable","\u002Freactive-extensions-part6-task-toobservable\u002F",5,{"title":1035,"permalink":1036,"heroImage":1037,"timeToRead":954},"Portable Class Library (PCL) version of NotificationsExtensions NuGet package","\u002Fportable-class-library-version-of-notificationsextensions-nuget-package\u002F","\u002Fimages\u002Fhero\u002FNuGet-1366x768.png",{"title":1039,"permalink":1040,"heroImage":1041,"timeToRead":1033},"Model-View-ViewModel (MVVM) - Part 1 - Overview","\u002Fmodel-view-viewmodel-mvvm-part1-overview\u002F","\u002Fimages\u002Fhero\u002FMVVM-1366x768.png",{"title":1043,"permalink":1044,"heroImage":1041,"timeToRead":993},"Model-View-ViewModel (MVVM) - Part 2 - IDisposable","\u002Fmodel-view-viewmodel-mvvm-part2-idisposable\u002F",{"title":1046,"permalink":1047,"heroImage":1041,"timeToRead":1048},"Model-View-ViewModel (MVVM) - Part 3 - INotifyPropertyChanged","\u002Fmodel-view-viewmodel-mvvm-part3-inotifypropertychanged\u002F",11,{"title":1050,"permalink":1051,"heroImage":1052,"timeToRead":988},"Naming Conventions","\u002Fnaming-conventions\u002F","\u002Fimages\u002Fhero\u002FNaming-Conventions-1366x768.png",{"title":1054,"permalink":1055,"heroImage":1041,"timeToRead":1056},"Model-View-ViewModel (MVVM) - Part 4 - INotifyDataErrorInfo","\u002Fmodel-view-viewmodel-mvvm-part4-inotifydataerrorinfo\u002F",12,{"title":1058,"permalink":1059,"heroImage":1022,"timeToRead":993},"Elysium Extra 1.1 Released","\u002Felysium-extra-1-1-released\u002F",{"title":1061,"permalink":1062,"heroImage":1063,"timeToRead":1064},"ASP.NET Core Boilerplate","\u002Fasp-net-mvc-boilerplate\u002F","\u002Fimages\u002Fhero\u002FASP.NET-Core-Boilerplate-1366x768.png",7,{"title":1066,"permalink":1067,"heroImage":1068,"timeToRead":1069},"Internet Favicon Madness (Updated)","\u002Finternet-favicon-madness\u002F","\u002Fimages\u002Fhero\u002FFavicons-1366x768.png",17,{"title":1071,"permalink":1072,"heroImage":1073,"timeToRead":1064},"Custom Visual Studio Project Templates","\u002Fcustom-visual-studio-project-templates\u002F","\u002Fimages\u002Fhero\u002FVisual-Studio-1366x768.png",{"title":1075,"permalink":1076,"heroImage":1073,"timeToRead":988},"Configuration File Transforms In Visual Studio Should Be Built In","\u002Fconfiguration-file-transforms-in-visual-studio-should-be-built-in\u002F",{"title":1078,"permalink":1079,"heroImage":1063,"timeToRead":1048},"Securing the ASP.NET MVC Web.config","\u002Fsecuring-the-aspnet-mvc-web-config\u002F",{"title":1081,"permalink":1082,"heroImage":992,"timeToRead":758},"Reactive Extensions (Rx) - Part 7 - Sample Events","\u002Freactive-extensions-part7-sample-events\u002F",{"title":1084,"permalink":1085,"heroImage":1086,"timeToRead":1087},"NWebSec ASP.NET MVC Security Through HTTP Headers","\u002Fnwebsec-asp-net-mvc-security-through-http-headers\u002F","\u002Fimages\u002Fhero\u002FNWebSec-1366x768.png",6,{"title":1089,"permalink":1090,"heroImage":1091,"timeToRead":83},"Content Security Policy (CSP) for ASP.NET MVC","\u002Fcontent-security-policy-for-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FContent-Security-Policy-CSP-for-ASP.NET-MVC-1366x768.png",{"title":1093,"permalink":1094,"heroImage":983,"timeToRead":1033},"C# 6.0 - Saving Developers From Themselves","\u002Fc-6-0-saving-developers-from-themselves\u002F",{"title":1096,"permalink":1097,"heroImage":1098,"timeToRead":1099},"Building RSS\u002FAtom Feeds for ASP.NET MVC","\u002Fbuilding-rssatom-feeds-for-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FRSS-And-Atom-1366x768.png",19,{"title":1101,"permalink":1102,"heroImage":1103,"timeToRead":1048},"Canonical URL's for ASP.NET MVC","\u002Fcanonical-urls-for-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FLink-Juice-1366x768.png",{"title":1105,"permalink":1106,"heroImage":1107,"timeToRead":993},"Dynamically Generating Robots.txt Using ASP.NET MVC","\u002Fdynamically-generating-robots-txt-using-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FRobots.txt-1366x768.jpg",{"title":1109,"permalink":1110,"heroImage":1111,"timeToRead":993},"Minifying HTML for ASP.NET MVC","\u002Fminifying-html-for-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FThe-Internet-Is-A-Series-Of-Tubes-1366x768.jpg",{"title":1113,"permalink":1114,"heroImage":1063,"timeToRead":758},"Whats New in ASP.NET Core Boilerplate","\u002Fwhats-new-in-asp-net-5-mvc-6-boilerplate\u002F",{"title":1116,"permalink":1117,"heroImage":1118,"timeToRead":1064},"Dynamically Generating Sitemap.xml for ASP.NET MVC","\u002Fdynamically-generating-sitemap-xml-for-asp-net-mvc\u002F","\u002Fimages\u002Fhero\u002FSitemaps-1366x768.png",{"title":1120,"permalink":1121,"heroImage":1122,"timeToRead":758},"So I've Been Awarded Microsoft MVP Status!","\u002Fso-ive-been-awarded-microsoft-mvp-status\u002F","\u002Fimages\u002Fhero\u002FMicrosoft-MVP-1366x768.png",{"title":1124,"permalink":1125,"heroImage":1126,"timeToRead":954},".NET Big-O Algorithm Complexity Cheat Sheet","\u002Fnet-big-o-algorithm-complexity-cheat-sheet\u002F","\u002Fimages\u002Fhero\u002FNET-Big-O-Algorithm-Complexity-Cheat-Sheet-1366x768.jpg",{"title":1128,"permalink":1129,"heroImage":1130,"timeToRead":988},"Logging with Serilog.Exceptions","\u002Flogging-with-serilog-exceptions\u002F","\u002Fimages\u002Fhero\u002FSerilog.Exceptions-1366x768.png",{"title":1132,"permalink":1133,"heroImage":1134,"timeToRead":954},"Make Certificate","\u002Fmake-certificate\u002F","\u002Fimages\u002Fhero\u002FMake-Certificate-1366x768.png",{"title":1136,"permalink":1137,"heroImage":1138,"timeToRead":758},"Colorful.Console","\u002Fcolorful-console\u002F","\u002Fimages\u002Fhero\u002FColorful.Console-1366x768.png",{"title":1140,"permalink":1141,"heroImage":1142,"timeToRead":988},"Subresource Integrity TagHelper Using ASP.NET Core - Part 1","\u002Fsubresource-integrity-taghelper-using-asp-net-core\u002F","\u002Fimages\u002Fhero\u002FMake-Security-Easy-1366x768.png",{"title":1144,"permalink":1145,"heroImage":1142,"timeToRead":993},"Subresource Integrity TagHelper Using ASP.NET Core - Part 2","\u002Fsubresource-integrity-taghelper-using-asp-net-core-part-2\u002F",{"title":1147,"permalink":1148,"heroImage":1149,"timeToRead":1033},"Social TagHelpers for ASP.NET Core","\u002Fsocial-taghelpers-for-asp-net-core\u002F","\u002Fimages\u002Fhero\u002FSocial-Media-1366x768.png",{"title":1151,"permalink":1152,"heroImage":1153,"timeToRead":1087},"Azure Active Directory Versus Identity Server","\u002Fazure-active-directory-versus-identity-server\u002F","\u002Fimages\u002Fhero\u002FAzure-Active-Directory-Versus-Identity-Server-1366x768.png",{"title":1155,"permalink":1156,"heroImage":1157,"timeToRead":758},"ASP.NET Core Fluent Interface Extensions","\u002Fasp-net-core-fluent-interface-extensions\u002F","\u002Fimages\u002Fhero\u002FFluent-Interface-All-The-Things-1366x768.png",{"title":1159,"permalink":1160,"heroImage":1161,"timeToRead":1048},"NGINX for ASP.NET Core In-Depth","\u002Fnginx-asp-net-core-depth\u002F","\u002Fimages\u002Fhero\u002FNGINX-1366x768.png",{"title":1163,"permalink":1164,"heroImage":983,"timeToRead":758},"The Dotnet Watch Tool","\u002Fthe-dotnet-watch-tool\u002F",{"title":1166,"permalink":1167,"heroImage":1168,"timeToRead":993},"Making Application Insights Fast & Secure","\u002Fmaking-application-insights-fast-and-secure\u002F","\u002Fimages\u002Fhero\u002FApplication-Insights-1366x768.png",{"title":1170,"permalink":1171,"heroImage":1172,"timeToRead":1064},"SEO Friendly URL's for ASP.NET Core","\u002Fseo-friendly-urls-asp-net-core\u002F","\u002Fimages\u002Fhero\u002FSearch-Engine-Optimization-SEO-1366x768.png",{"title":1174,"permalink":1175,"heroImage":992,"timeToRead":954},"Reactive Extensions (Rx) - Part 8 - Timeouts","\u002Freactive-extensions-rx-part-8-timeouts\u002F",{"title":1177,"permalink":1178,"heroImage":983,"timeToRead":993},"Custom Project Templates Using dotnet new","\u002Fcustom-project-templates-using-dotnet-new\u002F",{"title":1180,"permalink":1181,"heroImage":1182,"timeToRead":1023},"Cross-Platform DevOps for .NET Core","\u002Fcross-platform-devops-net-core\u002F","\u002Fimages\u002Fhero\u002FDotnet-Cake-AppVeyor-Travis-1366x768.png",{"title":1184,"permalink":1185,"heroImage":1186,"timeToRead":1064},"Cleaning Up CSPROJ","\u002Fcleaning-up-csproj\u002F","\u002Fimages\u002Fhero\u002FCleaning-Up-CSPROJ-1366x768.png",{"title":1188,"permalink":1189,"heroImage":1190,"timeToRead":974},"dotnet new Feature Selection","\u002Fdotnet-new-feature-selection\u002F","\u002Fimages\u002Fhero\u002FWho-Wants-To-Be-A-Millionaire-1366x768.png",{"title":1192,"permalink":1193,"heroImage":1194,"timeToRead":993},"ASP.NET Core Lazy Command Pattern","\u002Fasp-net-core-lazy-command-pattern\u002F","\u002Fimages\u002Fhero\u002FASP.NET-Core-Lazy-Command-Pattern-1366x768.png",{"title":1196,"permalink":1197,"heroImage":1198,"timeToRead":758},"Structured Data using Schema.NET","\u002Fstructured-data-using-schema-net\u002F","\u002Fimages\u002Fhero\u002FSchema.NET-1366x768.png",{"title":1200,"permalink":1201,"heroImage":1202,"timeToRead":1087},"Keeping Up With Software Development","\u002Fkeeping-software-development\u002F","\u002Fimages\u002Fhero\u002FKeeping-up-with-Software-Development-1366x768.png",{"title":1204,"permalink":1205,"heroImage":1206,"timeToRead":758},"A Very Generic .editorconfig File (Updated)","\u002Fgeneric-editorconfig-file\u002F","\u002Fimages\u002Fhero\u002FA-Very-Generic-Editorconfig-File-1366x768.png",{"title":1208,"permalink":1209,"heroImage":1210,"timeToRead":1033},"ASP.NET Core Caching in Practice","\u002Fasp-net-core-caching-in-practice\u002F","\u002Fimages\u002Fhero\u002FASP.NET-Core-Caching-in-Practice-1366x768.png",{"title":1212,"permalink":1213,"heroImage":1214,"timeToRead":954},"Docker Read-Only File Systems","\u002Fdocker-read-file-systems\u002F","\u002Fimages\u002Fhero\u002FDocker-1366x768.png",{"title":1216,"permalink":1217,"heroImage":1214,"timeToRead":988},"Docker Labels in Depth","\u002Fdocker-labels-depth\u002F",{"title":1219,"permalink":1220,"heroImage":1214,"timeToRead":993},"Useful Docker Images - Part 1","\u002Fuseful-docker-images-part1\u002F",{"title":1222,"permalink":1223,"heroImage":1214,"timeToRead":1033},"Useful Docker Images - Part 2","\u002Fuseful-docker-images-part2\u002F",{"title":1225,"permalink":1226,"heroImage":1227,"timeToRead":993},"Writing your Webpack configuration in TypeScript","\u002Fwriting-your-webpack-configuration-in-typescript\u002F","\u002Fimages\u002Fhero\u002FTypeScript-1366x768.png",{"title":1229,"permalink":1230,"heroImage":1231,"timeToRead":1033},"Writing Code while Asleep","\u002Fwriting-code-asleep\u002F","\u002Fimages\u002Fhero\u002FWhile-Alive-Eat-Sleep-Code-Repeat-1366x768.png",{"title":1233,"permalink":1234,"heroImage":983,"timeToRead":758},"The Dotnet Watch Tool Revisited","\u002Fthe-dotnet-watch-tool-revisited\u002F",{"title":970,"permalink":1236,"heroImage":964,"timeToRead":758},"\u002Fnet-boxed\u002F",{"title":1238,"permalink":1239,"heroImage":983,"timeToRead":758},"Migrating to Entity Framework Core Seed Data","\u002Fmigrating-to-entity-framework-core-seed-data\u002F",{"title":1241,"permalink":1242,"heroImage":983,"timeToRead":988},"Optimally Configuring Entity Framework Core","\u002Foptimally-configuring-entity-framework-core\u002F",{"title":1244,"permalink":1245,"heroImage":983,"timeToRead":954},"ASP.NET Core Hidden Gem - QueryHelpers","\u002Fasp-net-core-hidden-gem-queryhelpers\u002F",{"title":1247,"permalink":1248,"heroImage":983,"timeToRead":974},"Optimally Configuring ASP.NET Core HttpClientFactory","\u002Foptimally-configuring-asp-net-core-httpclientfactory\u002F",{"title":1250,"permalink":1251,"heroImage":1252,"timeToRead":1064},"PluralSight vs LinkedIn Learning vs FrontendMasters vs Egghead.io vs YouTube","\u002Fpluralsight-vs-linkedin-learning-vs-frontendmasters-vs-egghead-io-vs-youtube\u002F","\u002Fimages\u002Fhero\u002FOnline-Learning-1366x768.png",{"title":1254,"permalink":1255,"heroImage":1256,"timeToRead":974},"Is ASP.NET Core now a Mature Platform?","\u002Fis-asp-net-core-now-a-mature-platform\u002F","\u002Fimages\u002Fhero\u002FRocket-1366x768.jpg",{"title":39,"permalink":966,"heroImage":964,"timeToRead":974},{"title":1259,"permalink":1260,"heroImage":1214,"timeToRead":954},"Securing ASP.NET Core in Docker","\u002Fsecuring-asp-net-core-in-docker\u002F",{"title":1262,"permalink":1263,"heroImage":1264,"timeToRead":993},"Git Cloning the Windows OS Repo","\u002Fgit-cloning-the-windows-os-repo\u002F","\u002Fimages\u002Fhero\u002FWindows-1366x768.png",{"title":1266,"permalink":1267,"heroImage":1268,"timeToRead":1064},".gitattributes Best Practices","\u002Fgitattributes-best-practices\u002F","\u002Fimages\u002Fhero\u002FGit-1366x768.png",{"title":1270,"permalink":1271,"heroImage":983,"timeToRead":988},"Unit Testing dotnet new Templates","\u002Funit-testing-dotnet-new-templates\u002F",{"title":1273,"permalink":1274,"heroImage":964,"timeToRead":1033},"What dotnet new Could Be","\u002Fwhat-dotnet-new-could-be\u002F",{"title":1276,"permalink":1277,"heroImage":983,"timeToRead":993},"ASP.NET Core Integration Testing & Mocking using Moq","\u002Fasp-net-core-integration-testing-mocking-using-moq\u002F",{"title":1279,"permalink":1280,"heroImage":1281,"timeToRead":1064},"Choosing a Static Site Generator","\u002Fchoosing-a-static-site-generator\u002F","\u002Fimages\u002Fhero\u002FStatic-Site-Generators-1600x900.png",{"title":1283,"permalink":1284,"heroImage":1285,"timeToRead":758},"Spicing up your Browser Console","\u002Fspicing-up-your-browser-console\u002F","\u002Fimages\u002Fhero\u002FFiglet-Fonts-1600x900.png",{"title":1287,"permalink":1288,"heroImage":1289,"timeToRead":1033},"Racism in Software Development & Beyond","\u002Fracism-in-software-development-and-beyond\u002F","\u002Fimages\u002Fhero\u002FBlack-Glowing-Fist-1600x900.png",{"title":1291,"permalink":1292,"heroImage":1293,"timeToRead":1033},"The Easiest Way to Version NuGet Packages","\u002Fthe-easiest-way-to-version-nuget-packages\u002F","\u002Fimages\u002Fhero\u002FSemantic-Versioning-1600x900.png",{"title":1295,"permalink":1296,"heroImage":1037,"timeToRead":1087},"The Fastest NuGet Package Ever Published (Probably)","\u002Fthe-fastest-nuget-package-ever-published-probably\u002F",{"title":1298,"permalink":1299,"heroImage":983,"timeToRead":988},"Automating .NET Security Updates","\u002Fautomating-dotnet-security-updates\u002F",{"title":1301,"permalink":1302,"heroImage":1303,"timeToRead":1304},"Deep Dive into Open Telemetry for .NET","\u002Fdeep-dive-into-open-telemetry-for-net\u002F","\u002Fimages\u002Fhero\u002FOpen-Telemetry-1600x900.png",10,{"title":1306,"permalink":1307,"heroImage":1303,"timeToRead":988},"Open Telemetry for ASP.NET Core","\u002Fopen-telemetry-for-asp-net-core\u002F",{"title":1309,"permalink":1310,"heroImage":1303,"timeToRead":988},"Exporting Open Telemetry Data to Jaeger","\u002Fexporting-open-telemetry-data-to-jaeger\u002F",{"title":1312,"permalink":1313,"heroImage":1314,"timeToRead":988},"A System for Grouping & Sorting CSS Properties","\u002Fsystem-for-grouping-and-sorting-css-properties\u002F","\u002Fimages\u002Fhero\u002FCSS-1600x900.png",{"title":1316,"permalink":1317,"heroImage":1314,"timeToRead":1087},"CSS General Rules of Thumb","\u002Fcss-general-rules-of-thumb\u002F",{"title":1319,"permalink":1320,"heroImage":1321,"timeToRead":993},"Web Component Custom Element Gotchas","\u002Fweb-component-custom-element-gotchas\u002F","\u002Fimages\u002Fhero\u002FWeb-Components-1600x900.png",{"title":1323,"permalink":1324,"heroImage":1325,"timeToRead":758},"Code Coverage & Frontend Testing","\u002Fcode-coverage-and-frontend-testing\u002F","\u002Fimages\u002Fhero\u002FJest-Cypress-1600x900.png",{"title":1327,"permalink":1328,"heroImage":1073,"timeToRead":954},".NET Boxed Visual Studio Integration","\u002Fdotnet-boxed-visual-studio-integration\u002F",{"title":1330,"permalink":1331,"heroImage":1332,"timeToRead":988},"The Windows Package Manager","\u002Fwindows-package-manager\u002F","\u002Fimages\u002Fhero\u002FWinget-1600x900.png",{"title":1334,"permalink":1335,"heroImage":983,"timeToRead":988},"The Problem with C# 10 Implicit Usings","\u002Fthe-problem-with-csharp-10-implicit-usings\u002F",{"title":1337,"permalink":1338,"heroImage":1303,"timeToRead":993},"Optimally Configuring Open Telemetry Tracing for ASP.NET Core","\u002Foptimally-configuring-open-telemetry-tracing-for-asp-net-core\u002F",{"title":1340,"permalink":1341,"heroImage":1342,"timeToRead":758},"Live Streaming .NET","\u002Flive-streaming-dotnet\u002F","\u002Fimages\u002Fhero\u002FMy-YouTube-1920x1080.jpg",{"title":1344,"permalink":1345,"heroImage":1346,"timeToRead":758},"I Was Awarded as an Open UK Honouree","\u002Fopen-uk-honouree\u002F","\u002Fimages\u002Fhero\u002FOpen-UK-Honours-1366x768.jpg",{"title":1348,"permalink":1349,"heroImage":1350,"timeToRead":993},"On the Etiquette of Pull Request Comments","\u002Fon-the-etiquette-of-pull-request-comments\u002F","\u002Fimages\u002Fhero\u002FPrecious-PR-1600x900.jpg",{"title":1352,"permalink":1353,"heroImage":1354,"timeToRead":954},"AI Gone Rogue","\u002Fai-gone-rogue\u002F","\u002Fimages\u002Fhero\u002FHAL-9000-Prop-1600x900.png",{"left":4,"top":4,"width":24,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":1356},"\u003Cpath fill=\"currentColor\" d=\"M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.55 96.55 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.3 96.3 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96s-42.981-96-96-96\"\u002F>",{"left":4,"top":4,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":1358},"\u003Cpath fill=\"currentColor\" d=\"M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48c27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256\"\u002F>",{"left":4,"top":4,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":1360},"\u003Cpath fill=\"currentColor\" d=\"M459.37 151.716c.325 4.548.325 9.097.325 13.645c0 138.72-105.583 298.558-298.558 298.558c-59.452 0-114.68-17.219-161.137-47.106c8.447.974 16.568 1.299 25.34 1.299c49.055 0 94.213-16.568 130.274-44.832c-46.132-.975-84.792-31.188-98.112-72.772c6.498.974 12.995 1.624 19.818 1.624c9.421 0 18.843-1.3 27.614-3.573c-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319c-28.264-18.843-46.781-51.005-46.781-87.391c0-19.492 5.197-37.36 14.294-52.954c51.655 63.675 129.3 105.258 216.365 109.807c-1.624-7.797-2.599-15.918-2.599-24.04c0-57.828 46.782-104.934 104.934-104.934c30.213 0 57.502 12.67 76.67 33.137c23.715-4.548 46.456-13.32 66.599-25.34c-7.798 24.366-24.366 44.833-46.132 57.827c21.117-2.273 41.584-8.122 60.426-16.243c-14.292 20.791-32.161 39.308-52.628 54.253\"\u002F>",{"left":4,"top":4,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":1362},"\u003Cpath fill=\"currentColor\" d=\"M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6c0-13.8 11.1-24.9 24.9-24.9c13.6 0 24.6 11.1 24.6 24.9c0 13.6-11.1 24.6-24.6 24.6M504 256c0 137-111 248-248 248S8 393 8 256S119 8 256 8s248 111 248 248m-132.3-41.2c-9.4 0-17.7 3.9-23.8 10c-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3l55.4 12.5c0 13.6 11.1 24.6 24.6 24.6c13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8c-6.1-6.4-14.7-10.2-24.1-10.2c-34.9 0-46.3 46.9-14.4 62.8c-1.1 5-1.7 10.2-1.7 15.5c0 52.6 59.2 95.2 132 95.2c73.1 0 132.3-42.6 132.3-95.2c0-5.3-.6-10.8-1.9-15.8c31.3-16 19.8-62.5-14.9-62.5M302.8 331c-18.2 18.2-76.1 17.9-93.6 0c-2.2-2.2-6.1-2.2-8.3 0c-2.5 2.5-2.5 6.4 0 8.6c22.8 22.8 87.3 22.8 110.2 0c2.5-2.2 2.5-6.1 0-8.6c-2.2-2.2-6.1-2.2-8.3 0m7.7-75c-13.6 0-24.6 11.1-24.6 24.9c0 13.6 11.1 24.6 24.6 24.6c13.8 0 24.9-11.1 24.9-24.6c0-13.8-11-24.9-24.9-24.9\"\u002F>",{"left":4,"top":4,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":1364},"\u003Cpath fill=\"currentColor\" d=\"M512 194.8c0 101.3-82.4 183.8-183.8 183.8c-101.7 0-184.4-82.4-184.4-183.8c0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8M0 501.5h90v-491H0z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1366},"\u003Cpath fill=\"currentColor\" d=\"m20.216 6.415l-.132-.666c-.119-.598-.388-1.163-1.001-1.379c-.197-.069-.42-.098-.57-.241c-.152-.143-.196-.366-.231-.572c-.065-.378-.125-.756-.192-1.133c-.057-.325-.102-.69-.25-.987c-.195-.4-.597-.634-.996-.788a6 6 0 0 0-.626-.194c-1-.263-2.05-.36-3.077-.416a26 26 0 0 0-3.7.062c-.915.083-1.88.184-2.75.5c-.318.116-.646.256-.888.501c-.297.302-.393.77-.177 1.146c.154.267.415.456.692.58c.36.162.737.284 1.123.366c1.075.238 2.189.331 3.287.37q1.829.074 3.65-.118q.449-.05.896-.119c.352-.054.578-.513.474-.834c-.124-.383-.457-.531-.834-.473c-.466.074-.96.108-1.382.146q-1.767.12-3.536.006a22 22 0 0 1-1.157-.107c-.086-.01-.18-.025-.258-.036q-.364-.055-.724-.13c-.111-.027-.111-.185 0-.212h.005q.416-.09.838-.147h.002c.131-.009.263-.032.394-.048a25 25 0 0 1 3.426-.12q1.011.029 2.017.144l.228.031q.4.06.798.145c.392.085.895.113 1.07.542c.055.137.08.288.111.431l.319 1.484a.237.237 0 0 1-.199.284h-.003l-.112.015a37 37 0 0 1-4.743.295a37 37 0 0 1-4.699-.304c-.14-.017-.293-.042-.417-.06c-.326-.048-.649-.108-.973-.161c-.393-.065-.768-.032-1.123.161c-.29.16-.527.404-.675.701c-.154.316-.199.66-.267 1c-.069.34-.176.707-.135 1.056c.087.753.613 1.365 1.37 1.502a39.7 39.7 0 0 0 11.343.376a.483.483 0 0 1 .535.53l-.071.697l-1.018 9.907c-.041.41-.047.832-.125 1.237c-.122.637-.553 1.028-1.182 1.171q-.868.197-1.756.205c-.656.004-1.31-.025-1.966-.022c-.699.004-1.556-.06-2.095-.58c-.475-.458-.54-1.174-.605-1.793l-.731-7.013l-.322-3.094c-.037-.351-.286-.695-.678-.678c-.336.015-.718.3-.678.679l.228 2.185l.949 9.112c.147 1.344 1.174 2.068 2.446 2.272c.742.12 1.503.144 2.257.156c.966.016 1.942.053 2.892-.122c1.408-.258 2.465-1.198 2.616-2.657l1.024-9.995l.215-2.087a.48.48 0 0 1 .39-.426c.402-.078.787-.212 1.074-.518c.455-.488.546-1.124.385-1.766zm-1.478.772c-.145.137-.363.201-.578.233c-2.416.359-4.866.54-7.308.46c-1.748-.06-3.477-.254-5.207-.498c-.17-.024-.353-.055-.47-.18c-.22-.236-.111-.71-.054-.995c.052-.26.152-.609.463-.646c.484-.057 1.046.148 1.526.22q.865.132 1.737.212c2.48.226 5.002.19 7.472-.14q.675-.09 1.345-.21c.399-.072.84-.206 1.08.206c.166.281.188.657.162.974a.54.54 0 0 1-.169.364zm-6.159 3.9c-.862.37-1.84.788-3.109.788a6 6 0 0 1-1.569-.217l.877 9.004c.065.78.717 1.38 1.5 1.38c0 0 1.243.065 1.658.065c.447 0 1.786-.065 1.786-.065c.783 0 1.434-.6 1.499-1.38l.94-9.95a4 4 0 0 0-1.322-.238c-.826 0-1.491.284-2.26.613\"\u002F>",{"left":4,"top":4,"width":27,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":1368},"\u003Cpath fill=\"currentColor\" d=\"M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134c-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9c152.3 0 165.1-3.7 204 11.4c60.1 23.3 65.6 79.5 44 140.3c-21.5 62.6-72.5 89.5-140.1 90.3c-43.4.7-69.5-7-75.3 24.2M357.1 152c-1.8-1.3-2.5-1.8-3 1.3c-2 11.4-5.1 22.5-8.8 33.6c-39.9 113.8-150.5 103.9-204.5 103.9c-6.1 0-10.1 3.3-10.9 9.4c-22.6 140.4-27.1 169.7-27.1 169.7c-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9c.7-5.4-1.1 6.1 14.4-91.3c4.6-22 14.3-19.7 29.3-19.7c71 0 126.4-28.8 142.9-112.3c6.5-34.8 4.6-71.4-23.8-92.6\"\u002F>",{"left":4,"top":4,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":1370},"\u003Cpath fill=\"currentColor\" d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8m0 448c-110.532 0-200-89.431-200-200c0-110.495 89.472-200 200-200c110.491 0 200 89.471 200 200c0 110.53-89.431 200-200 200m107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516c17.561-9.845 28.324-16.541 28.324-29.579c0-17.246-21.999-28.693-39.784-28.693c-23.189 0-33.894 10.977-48.942 29.969c-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8M298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42s18.841-42 42-42s42 18.841 42 42\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1372},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 12H5m7 7l-7-7l7-7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":1374},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14m-7-7l7 7l-7 7\"\u002F>",1793228887619]