PageSourceSearch

https://www.stevejgordon.co.uk/

html stevejgordon.co.uk collected 2026-09-24 19:00:22 UTC 79,036 bytes, 1,032 lines download raw bytes

1<!doctype html>
2<!--[if !IE]>
3<html class="no-js non-ie" lang="en-GB"> <![endif]-->
4<!--[if IE 7 ]>
5<html class="no-js ie7" lang="en-GB"> <![endif]-->
6<!--[if IE 8 ]>
7<html class="no-js ie8" lang="en-GB"> <![endif]-->
8<!--[if IE 9 ]>
9<html class="no-js ie9" lang="en-GB"> <![endif]-->
10<!--[if gt IE 9]><!-->
11<html class="no-js" lang="en-GB"> <!--<![endif]-->
12<head>
13<meta charset="UTF-8">
14<meta name="viewport" content="width=device-width, initial-scale=1">
15<meta name="theme-color" content="#2a9fbc">
16<link rel="profile" href="https://gmpg.org/xfn/11">
17
18<script data-name="BMC-Widget" src="https://cdnjs.buymeacoffee.com/1.0.0/widget.prod.min.js" data-id="stevejgordon" data-description="Support me on Buy me a coffee!" data-message="If you found this blog helpful, please buy me a coffee!" data-color="#FF813F" data-position="left" data-x_margin="18" data-y_margin="18"></script>
18<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
19	<style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>
20	
21	<!-- This site is optimized with the Yoast SEO plugin v24.6 - https://yoast.com/wordpress/plugins/seo/ -->
22	<title>Steve Gordon - Code with Steve - Adventures in .NET</title>
23	<meta name="description" content="My blog where I discuss software development, mostly using .NET Core and ASP.NET Core." />
24	<link rel="canonical" href="https://www.stevejgordon.co.uk/" />
25	<link rel="next" href="https://www.stevejgordon.co.uk/page/2" />
26	<meta property="og:locale" content="en_GB" />
27	<meta property="og:type" content="website" />
28	<meta property="og:title" content="Steve Gordon - Code with Steve" />
29	<meta property="og:description" content="My blog where I discuss ASP.NET Core and .NET Core development." />
30	<meta property="og:url" content="https://www.stevejgordon.co.uk/" />
31	<meta property="og:site_name" content="Steve Gordon - Code with Steve" />
32	<meta name="twitter:card" content="summary_large_image" />
33	<meta name="twitter:site" content="@stevejgordon" />
34	
34<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://www.stevejgordon.co.uk/","url":"https://www.stevejgordon.co.uk/","name":"Steve Gordon - Code with Steve - Adventures in .NET","isPartOf":{"@id":"https://www.stevejgordon.co.uk/#website"},"about":{"@id":"https://www.stevejgordon.co.uk/#/schema/person/854225a21893fb73c1a216026c0e8c87"},"description":"My blog where I discuss software development, mostly using .NET Core and ASP.NET Core.","breadcrumb":{"@id":"https://www.stevejgordon.co.uk/#breadcrumb"},"inLanguage":"en-GB"},{"@type":"BreadcrumbList","@id":"https://www.stevejgordon.co.uk/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https://www.stevejgordon.co.uk/#website","url":"https://www.stevejgordon.co.uk/","name":"Steve Gordon - Code with Steve","description":"Adventures in .NET","publisher":{"@id":"https://www.stevejgordon.co.uk/#/schema/person/854225a21893fb73c1a216026c0e8c87"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.stevejgordon.co.uk/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https://www.stevejgordon.co.uk/#/schema/person/854225a21893fb73c1a216026c0e8c87","name":"Steve Gordon","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https://www.stevejgordon.co.uk/#/schema/person/image/","url":"https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left.png","contentUrl":"https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left.png","width":600,"height":601,"caption":"Steve Gordon"},"logo":{"@id":"https://www.stevejgordon.co.uk/#/schema/person/image/"},"description":"Steve Gordon is a Pluralsight author, 7x Microsoft MVP, and a .NET engineer at Elastic where he maintains the .NET APM agent and related libraries. Steve is passionate about community and all things .NET related, having worked with ASP.NET for over 21 years. Steve enjoys sharing his knowledge through his blog, in videos and by presenting talks at user groups and conferences. Steve is excited to participate in the active .NET community and founded .NET South East, a .NET Meetup group based in Brighton. He enjoys contributing to and maintaining OSS projects. You can find Steve on most social media platforms as @stevejgordon","sameAs":["https://www.stevejgordon.co.uk","https://www.linkedin.com/in/steve-j-gordon/","https://x.com/stevejgordon","https://www.youtube.com/c/stevegordon"]}]}</script>
34
35	<!-- / Yoast SEO plugin. -->
36
37
38<link rel='dns-prefetch' href='//www.stevejgordon.co.uk' />
39<link rel='dns-prefetch' href='//fonts.googleapis.com' />
40<link rel="alternate" type="application/rss+xml" title="Steve Gordon - Code with Steve &raquo; Feed" href="https://www.stevejgordon.co.uk/feed" />
41<link rel="alternate" type="application/rss+xml" title="Steve Gordon - Code with Steve &raquo; Comments Feed" href="https://www.stevejgordon.co.uk/comments/feed" />
42		<!-- This site uses the Google Analytics by MonsterInsights plugin v11.3.0 - Using Analytics tracking - https://www.monsterinsights.com/ -->
vendor: 59 bytes, lines 42-43
42
43							<script src="//www.googletagmanager.com/gtag/js?id=
43G-8TF3DGJTVD
vendor: 91 bytes, lines 43-44
43"  data-cfasync="false" data-wpfc-render="false" type="text/javascript" async></script>
44			
44<script data-cfasync="false" data-wpfc-render="false" type="text/javascript">
45				var mi_version = '11.3.0';
46				var mi_track_user = true;
47				var mi_no_track_reason = '';
48								var MonsterInsightsDefaultLocations = {"page_location":"https:\/\/www.stevejgordon.co.uk\/"};
49								if ( typeof MonsterInsightsPrivacyGuardFilter === 'function' ) {
50					var MonsterInsightsLocations = (typeof MonsterInsightsExcludeQuery === 'object') ? MonsterInsightsPrivacyGuardFilter( MonsterInsightsExcludeQuery ) : MonsterInsightsPrivacyGuardFilter( MonsterInsightsDefaultLocations );
51				} else {
52					var MonsterInsightsLocations = (typeof MonsterInsightsExcludeQuery === 'object') ? MonsterInsightsExcludeQuery : MonsterInsightsDefaultLocations;
53				}
54
55								var disableStrs = [
56										'ga-disable-G-8TF3DGJTVD',
57									];
58
59				/* Function to detect opted out users */
60				function __gtagTrackerIsOptedOut() {
61					for (var index = 0; index < disableStrs.length; index++) {
62						if (document.cookie.indexOf(disableStrs[index] + '=true') > -1) {
63							return true;
64						}
65					}
66
67					return false;
68				}
69
70				/* Disable tracking if the opt-out cookie exists. */
71				if (__gtagTrackerIsOptedOut()) {
72					for (var index = 0; index < disableStrs.length; index++) {
73						window[disableStrs[index]] = true;
74					}
75				}
76
77				/* Opt-out function */
78				function __gtagTrackerOptout() {
79					for (var index = 0; index < disableStrs.length; index++) {
80						document.cookie = disableStrs[index] + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/';
81						window[disableStrs[index]] = true;
82					}
83				}
84
85				if ('undefined' === typeof gaOptout) {
86					function gaOptout() {
87						__gtagTrackerOptout();
88					}
89				}
90								window.dataLayer = window.dataLayer || [];
91
92				window.MonsterInsightsDualTracker = {
93					helpers: {},
94					trackers: {},
95				};
96				if (mi_track_user) {
97					function __gtagDataLayer() {
98						dataLayer.push(arguments);
99					}
100
101					function __gtagTracker(type, name, parameters) {
102						if (!parameters) {
103							parameters = {};
104						}
105
106						if (parameters.send_to) {
107							__gtagDataLayer.apply(null, arguments);
108							return;
109						}
110
111						if (type === 'event') {
112														parameters.send_to = monsterinsights_frontend.v4_id;
113							var hookName = name;
114							if (typeof parameters['event_category'] !== 'undefined') {
115								hookName = parameters['event_category'] + ':' + name;
116							}
117
118							if (typeof MonsterInsightsDualTracker.trackers[hookName] !== 'undefined') {
119								MonsterInsightsDualTracker.trackers[hookName](parameters);
120							} else {
121								__gtagDataLayer('event', name, parameters);
122							}
123							
124						} else {
125							__gtagDataLayer.apply(null, arguments);
126						}
127					}
128
129					__gtagTracker('js', new Date());
130					__gtagTracker('set', {
131						'developer_id.dZGIzZG': true,
132											});
133					if ( MonsterInsightsLocations.page_location ) {
134						__gtagTracker('set', MonsterInsightsLocations);
135					}
136										__gtagTracker('config', 'G-8TF3DGJTVD', {"forceSSL":"true"} );
137										window.gtag = __gtagTracker;										(function () {
138						/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ */
139						/* ga and __gaTracker compatibility shim. */
140						var noopfn = function () {
141							return null;
142						};
143						var newtracker = function () {
144							return new Tracker();
145						};
146						var Tracker = function () {
147							return null;
148						};
149						var p = Tracker.prototype;
150						p.get = noopfn;
151						p.set = noopfn;
152						p.send = function () {
153							var args = Array.prototype.slice.call(arguments);
154							args.unshift('send');
155							__gaTracker.apply(null, args);
156						};
157						var __gaTracker = function () {
158							var len = arguments.length;
159							if (len === 0) {
160								return;
161							}
162							var f = arguments[len - 1];
163							if (typeof f !== 'object' || f === null || typeof f.hitCallback !== 'function') {
164								if ('send' === arguments[0]) {
165									var hitConverted, hitObject = false, action;
166									if ('event' === arguments[1]) {
167										if ('undefined' !== typeof arguments[3]) {
168											hitObject = {
169												'eventAction': arguments[3],
170												'eventCategory': arguments[2],
171												'eventLabel': arguments[4],
172												'value': arguments[5] ? arguments[5] : 1,
173											}
174										}
175									}
176									if ('pageview' === arguments[1]) {
177										if ('undefined' !== typeof arguments[2]) {
178											hitObject = {
179												'eventAction': 'page_view',
180												'page_path': arguments[2],
181											}
182										}
183									}
184									if (typeof arguments[2] === 'object') {
185										hitObject = arguments[2];
186									}
187									if (typeof arguments[5] === 'object') {
188										Object.assign(hitObject, arguments[5]);
189									}
190									if ('undefined' !== typeof arguments[1].hitType) {
191										hitObject = arguments[1];
192										if ('pageview' === hitObject.hitType) {
193											hitObject.eventAction = 'page_view';
194										}
195									}
196									if (hitObject) {
197										action = 'timing' === arguments[1].hitType ? 'timing_complete' : hitObject.eventAction;
198										hitConverted = mapArgs(hitObject);
199										__gtagTracker('event', action, hitConverted);
200									}
201								}
202								return;
203							}
204
205							function mapArgs(args) {
206								var arg, hit = {};
207								var gaMap = {
208									'eventCategory': 'event_category',
209									'eventAction': 'event_action',
210									'eventLabel': 'event_label',
211									'eventValue': 'event_value',
212									'nonInteraction': 'non_interaction',
213									'timingCategory': 'event_category',
214									'timingVar': 'name',
215									'timingValue': 'value',
216									'timingLabel': 'event_label',
217									'page': 'page_path',
218									'location': 'page_location',
219									'title': 'page_title',
220									'referrer' : 'page_referrer',
221								};
222								for (arg in args) {
223																		if (!(!args.hasOwnProperty(arg) || !gaMap.hasOwnProperty(arg))) {
224										hit[gaMap[arg]] = args[arg];
225									} else {
226										hit[arg] = args[arg];
227									}
228								}
229								return hit;
230							}
231
232							try {
233								f.hitCallback();
234							} catch (ex) {
235							}
236						};
237						__gaTracker.create = newtracker;
238						__gaTracker.getByName = newtracker;
239						__gaTracker.getAll = function () {
240							return [];
241						};
242						__gaTracker.remove = noopfn;
243						__gaTracker.loaded = true;
244						window['__gaTracker'] = __gaTracker;
245					})();
246									} else {
247										console.log("");
248					(function () {
249						function __gtagTracker() {
250							return null;
251						}
252
253						window['__gtagTracker'] = __gtagTracker;
254						window['gtag'] = __gtagTracker;
255					})();
256									}
257			</script>
257
258							<!-- / Google Analytics by MonsterInsights -->
259		
259<script type="text/javascript">
260/* <![CDATA[ */
261window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/www.stevejgordon.co.uk\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.7.9"}};
262/*! This file is auto-generated */
263!function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);
264/* ]]> */
265</script>
265
266<style id='wp-emoji-styles-inline-css' type='text/css'>
267
268	img.wp-smiley, img.emoji {
269		display: inline !important;
270		border: none !important;
271		box-shadow: none !important;
272		height: 1em !important;
273		width: 1em !important;
274		margin: 0 0.07em !important;
275		vertical-align: -0.1em !important;
276		background: none !important;
277		padding: 0 !important;
278	}
279</style>
280<link rel='stylesheet' id='wp-block-library-css' href='https://www.stevejgordon.co.uk/wp-includes/css/dist/block-library/style.min.css?ver=6.7.9' type='text/css' media='all' />
281<style id='classic-theme-styles-inline-css' type='text/css'>
282/*! This file is auto-generated */
283.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
284</style>
285<style id='global-styles-inline-css' type='text/css'>
286:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
286--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
286.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
287:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
288:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
289:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
290</style>
291<link rel='stylesheet' id='contact-form-7-css' href='https://www.stevejgordon.co.uk/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=6.0.5' type='text/css' media='all' />
292<link rel='stylesheet' id='mailerlite_forms.css-css' href='https://www.stevejgordon.co.uk/wp-content/plugins/official-mailerlite-sign-up-forms/assets/css/mailerlite_forms.css?ver=1.7.26' type='text/css' media='all' />
293<link rel='stylesheet' id='ce_responsive-css' href='https://www.stevejgordon.co.uk/wp-content/plugins/simple-embed-code/css/video-container.min.css?ver=2.5.1' type='text/css' media='all' />
294<link rel='stylesheet' id='sparkling-bootstrap-css' href='https://www.stevejgordon.co.uk/wp-content/themes/sparkling/assets/css/bootstrap.min.css?ver=6.7.9' type='text/css' media='all' />
295<link rel='stylesheet' id='sparkling-icons-css' href='https://www.stevejgordon.co.uk/wp-content/themes/sparkling/assets/css/fontawesome-all.min.css?ver=5.1.1.' type='text/css' media='all' />
296<link rel='stylesheet' id='sparkling-fonts-css' href='//fonts.googleapis.com/css?family=Open+Sans%3A400italic%2C400%2C600%2C700%7CRoboto+Slab%3A400%2C300%2C700&#038;ver=6.7.9' type='text/css' media='all' />
297<link rel='stylesheet' id='sparkling-style-css' href='https://www.stevejgordon.co.uk/wp-content/themes/sparkling/style.css?ver=2.4.2' type='text/css' media='all' />
298<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/plugins/google-analytics-for-wordpress/assets/js/frontend-gtag.min.js?ver=11.3.0" id="monsterinsights-frontend-script-js" async="async" data-wp-strategy="async"></script>
vendor: 1 bytes, line 298
298
299<script data-cfasync="false" data-wpfc-render="false" type="text/javascript" id='monsterinsights-frontend-script-js-extra'>/* <![CDATA[ */
300var monsterinsights_frontend = {"js_events_tracking":"true","download_extensions":"doc,pdf,ppt,zip,xls,docx,pptx,xlsx","inbound_paths":"[]","home_url":"https:\/\/www.stevejgordon.co.uk","hash_tracking":"false","v4_id":"G-8TF3DGJTVD"};/* ]]> */
301</script>
vendor: 1 bytes, line 301
301
302<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
vendor: 1 bytes, line 302
302
303<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
vendor: 1 bytes, line 303
303
304<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/themes/sparkling/assets/js/vendor/bootstrap.min.js?ver=6.7.9" id="sparkling-bootstrapjs-js"></script>
vendor: 1 bytes, line 304
304
305<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/themes/sparkling/assets/js/functions.js?ver=20180503" id="sparkling-functions-js"></script>
305
306<link rel="https://api.w.org/" href="https://www.stevejgordon.co.uk/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.stevejgordon.co.uk/xmlrpc.php?rsd" />
307<meta name="generator" content="WordPress 6.7.9" />
308            <!-- MailerLite Universal -->
309            
309<script>
310                (function (m, a, i, l, e, r) {
311                    m['MailerLiteObject'] = e;
312
313                    function f() {
314                        var c = {a: arguments, q: []};
315                        var r = this.push(c);
316                        return "number" != typeof r ? r : f.bind(c.q);
317                    }
318
319                    f.q = f.q || [];
320                    m[e] = m[e] || f.bind(f.q);
321                    m[e].q = m[e].q || f.q;
322                    r = a.createElement(i);
323                    var _ = a.getElementsByTagName(i)[0];
324                    r.async = 1;
325                    r.src = l + '?' + (~~(new Date().getTime() / 10000000));
326                    _.parentNode.insertBefore(r, _);
327                })(window, document, 'script', 'https://static.mailerlite.com/js/universal.js', 'ml');
328
329                var ml_account = ml('accounts', '2206765', 'i6t8a5v9b2', 'load');
330            </script>
330
331            <!-- End MailerLite Universal -->
332        			<style type="text/css" media="screen">
333				/**
334				 * Plugin Name: Subtitles
335				 * Plugin URI: http://wordpress.org/plugins/subtitles/
336				 * Description: Easily add subtitles into your WordPress posts, pages, custom post types, and themes.
337				 * Author: We Cobble
338				 * Author URI: https://wecobble.com/
339				 * Version: 2.2.0
340				 * License: GNU General Public License v2 or later
341				 * License URI: http://www.gnu.org/licenses/gpl-2.0.html
342				 */
343
344				/**
345				 * Be explicit about this styling only applying to spans,
346				 * since that's the default markup that's returned by
347				 * Subtitles. If a developer overrides the default subtitles
348				 * markup with another element or class, we don't want to stomp
349				 * on that.
350				 *
351				 * @since 1.0.0
352				 */
353				span.entry-subtitle {
354					display: block; /* Put subtitles on their own line by default. */
355					font-size: 0.53333333333333em; /* Sensible scaling. It's assumed that post titles will be wrapped in heading tags. */
356				}
357				/**
358				 * If subtitles are shown in comment areas, we'll hide them by default.
359				 *
360				 * @since 1.0.5
361				 */
362				#comments .comments-title span.entry-subtitle {
363					display: none;
364				}
365			</style><style type="text/css">a, #infinite-handle span, #secondary .widget .post-content a, .entry-meta a {color:#5d1fc1}a:hover, a:focus, a:active, #secondary .widget .post-content a:hover, #secondary .widget .post-content a:focus, .woocommerce nav.woocommerce-pagination ul li a:focus, .woocommerce nav.woocommerce-pagination ul li a:hover, .woocommerce nav.woocommerce-pagination ul li span.current, #secondary .widget a:hover, #secondary .widget a:focus {color: #2abc90;}.btn-default, .label-default, .flex-caption h2, .btn.btn-default.read-more,button,
366              .navigation .wp-pagenavi-pagination span.current,.navigation .wp-pagenavi-pagination a:hover,
367              .woocommerce a.button, .woocommerce button.button,
368              .woocommerce input.button, .woocommerce #respond input#submit.alt,
369              .woocommerce a.button, .woocommerce button.button,
370              .woocommerce a.button.alt, .woocommerce button.button.alt, .woocommerce input.button.alt { background-color: #2abc90; border-color: #2abc90;}.site-main [class*="navigation"] a, .more-link, .pagination>li>a, .pagination>li>span, .cfa-button { color: #2abc90}.cfa-button {border-color: #2abc90;}.btn-default:hover, .btn-default:focus,.label-default[href]:hover, .label-default[href]:focus, .tagcloud a:hover, .tagcloud a:focus, button, .main-content [class*="navigation"] a:hover, .main-content [class*="navigation"] a:focus, #infinite-handle span:hover, #infinite-handle span:focus-within, .btn.btn-default.read-more:hover, .btn.btn-default.read-more:focus, .btn-default:hover, .btn-default:focus, .scroll-to-top:hover, .scroll-to-top:focus, .btn-default:active, .btn-default.active, .site-main [class*="navigation"] a:hover, .site-main [class*="navigation"] a:focus, .more-link:hover, .more-link:focus, #image-navigation .nav-previous a:hover, #image-navigation .nav-previous a:focus, #image-navigation .nav-next a:hover, #image-navigation .nav-next a:focus, .cfa-button:hover, .cfa-button:focus, .woocommerce a.button:hover, .woocommerce a.button:focus, .woocommerce button.button:hover, .woocommerce button.button:focus, .woocommerce input.button:hover, .woocommerce input.button:focus, .woocommerce #respond input#submit.alt:hover, .woocommerce #respond input#submit.alt:focus, .woocommerce a.button:hover, .woocommerce a.button:focus, .woocommerce button.button:hover, .woocommerce button.button:focus, .woocommerce input.button:hover, .woocommerce input.button:focus, .woocommerce a.button.alt:hover, .woocommerce a.button.alt:focus, .woocommerce button.button.alt:hover, .woocommerce button.button.alt:focus, .woocommerce input.button.alt:hover, .woocommerce input.button.alt:focus, a:hover .flex-caption h2 { background-color: #2a9fbc; border-color: #2a9fbc; }.pagination>li>a:focus, .pagination>li>a:hover, .pagination>li>span:focus-within, .pagination>li>span:hover {color: #2a9fbc;}h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6, .entry-title, .entry-title a {color: #2a9fbc;}.navbar.navbar-default, .navbar-default .navbar-nav .open .dropdown-menu > li > a {background-color: #2a9fbc;}.navbar-default .navbar-nav > li:hover > a, .navbar-default .navbar-nav > li:focus-within > a, .navbar-nav > li:hover > .caret, .navbar-nav > li:focus-within > .caret, .navbar-default .navbar-nav.sparkling-mobile-menu > li.open > a, .navbar-default .navbar-nav.sparkling-mobile-menu > li.open > .caret, .navbar-default .navbar-nav > li:hover, .navbar-default .navbar-nav > li:focus-within, .navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > .caret, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus, .navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus, .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {color: #0a0002;}@media (max-width: 767px){ .navbar-default .navbar-nav > li.open > a, .navbar-default .navbar-nav > li.open > .caret { color: #0a0002 !important; } }.social-icons li a {background-color: #2abc90 !important ;}
370body, .entry-content {color:#4c4c4c}</style>		<style type="text/css">
371				.navbar > .container .navbar-brand {
372			color: #a3a3a3;
373		}
374		</style>
375	<link rel="icon" href="https://www.stevejgordon.co.uk/wp-content/uploads/2019/07/cropped-Portrait-Small-32x32.png" sizes="32x32" />
376<link rel="icon" href="https://www.stevejgordon.co.uk/wp-content/uploads/2019/07/cropped-Portrait-Small-192x192.png" sizes="192x192" />
377<link rel="apple-touch-icon" href="https://www.stevejgordon.co.uk/wp-content/uploads/2019/07/cropped-Portrait-Small-180x180.png" />
378<meta name="msapplication-TileImage" content="https://www.stevejgordon.co.uk/wp-content/uploads/2019/07/cropped-Portrait-Small-270x270.png" />
379		<style type="text/css" id="wp-custom-css">
380			.widget_sp_image img {border-radius: 50%; width: 200px
381}
382
383.navbar > .container .navbar-header .navbar-brand { color: white; font-family: 'Montserrat', sans-serif; text-transform: uppercase; } 
384
385.syntaxhighlighter code {
386	color:#217b91;
387  background-color: #eaeffa;
388}
389
390.syntaxhighlighter table td.code
391{	vertical-align: top !important;}
392
393.syntaxhighlighter {
394	border: 1px solid #CDCDCD;
395	margin-bottom: 10px;
396	margin-top: 10px;
397	padding: 12px 2px;
398}
399
400.single_line table td.code {
401	padding-left: 8px !important;
402}
403
404.syntaxhighlighter .line {
405	line-height: 1.4 !important;
406}
407
408.syntaxhighlighter .line code {
409	font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace !important;
410}
411
412#secondary .widget ul li { color: #4f9ee3;} 
413
414.navbar {
415	background: #2a9fbc;
416background: -moz-linear-gradient(-45deg, #2a9fbc 0%, #2abc90 100%);
417background: -webkit-linear-gradient(-45deg, #2a9fbc 0%,#2abc90 100%);
418background: linear-gradient(135deg, #2a9fbc 0%,#2abc90 100%);
419filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2a9fbc', endColorstr='#2abc90',GradientType=1 );
420}
421
422#secondary .widget a { color: #2a56bc;} 
423
424.entry-title a {color: #2A9FBC;}
425
426.entry-title a:hover {
427    color: #2ABC90;
428}
429
430.entry-title-primary {
431	font-family: 'Barlow Condensed', sans-serif; padding-top: 5px; text-transform: uppercase; letter-spacing: 1px
432}
433
434.site-main h1 {
435	font-family: 'Barlow Condensed', sans-serif; text-transform: uppercase; 
436}
437
438.site-main h2 {
439	font-family: 'Barlow Condensed', sans-serif; text-transform: uppercase; 
440}
441
442#secondary .widget > h3{
443	font-family: 'Barlow', sans-serif; text-transform: uppercase; color: #2A9FBC;
444}
445
446#menu-social li a[href*="twitter.com"]:hover {
447    background-color: #dedede !important;
448}
449
450
451#menu-social li a[href*="github.com"]:hover {
452    background-color: #dedede !important;
453}
454
455
456#menu-social li a[href*="linkedin.com"]:hover {
457    background-color: #dedede !important;
458}
459
460#menu-social li a[href*="youtube.com"]:hover {
461    background-color: #dedede !important;
462}
463
464#menu-social li a[href*="fosstodon.org"]:hover {
465    background-color: #dedede !important;
466}
467
468.author-name {
469	font-family: 'Barlow Condensed', sans-serif; text-transform: uppercase; 
470}
471
472.tagcloud a { background-color: #6c6c6c}
473
474
475.site-main h3 {
476	font-family: 'Barlow Condensed', sans-serif; text-transform: uppercase; 
477}
478
479.entry-subtitle {
480	font-family: 'Barlow', sans-serif; padding-top: 5px;
481}
482
483.cta-button {
484	width: 100%;
485	text-align: center;
486}
487
488.cta-view-course {
489	margin-top: 15px;
490	background-color: #2abc90;
491	color: #fff;
492    font-size: 23px;
493    display: inline-block;
494    height: 60px;
495  	line-height: 60px;
496    width: 50%;
497    margin-bottom: 25px;
498    border-radius: 5px;    
499}
500.cta-view-course:hover {
501	color : #2abc90;
502	background-color: #dedede; 
503}
504
505.twitter-tweet {
506	 margin: auto;
507}
508
509code
510{
511	color: #3f34a3;
512	background-color: #e8eafa;
513	font-size: 97%;
514	font-weight: bold;
515	padding: 3px 5px;
516}
517
518.wp-block-image
519{
520	padding-top: 25px;
521	padding-bottom: 25px;
522}		</style>
523		
524</head>
525
526<body class="home blog">
527	<a class="sr-only sr-only-focusable" href="#content">Skip to main content</a>
528<div id="page" class="hfeed site">
529
530	<header id="masthead" class="site-header" role="banner">
531		<nav class="navbar navbar-default" role="navigation">
532			<div class="container">
533				<div class="row">
534					<div class="site-navigation-inner col-sm-12">
535						<div class="navbar-header">
536
537
538														<div id="logo">
539															<h1 class="site-name">																		<a class="navbar-brand" href="https://www.stevejgordon.co.uk/" title="Steve Gordon &#8211; Code with Steve" rel="home">Steve Gordon &#8211; Code with Steve</a>
540																</h1>																													</div><!-- end of #logo -->
541
542							<button type="button" class="btn navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
543								<span class="sr-only">Toggle navigation</span>
544								<span class="icon-bar"></span>
545								<span class="icon-bar"></span>
546								<span class="icon-bar"></span>
547							</button>
548						</div>
549
550
551
552						<div class="collapse navbar-collapse navbar-ex1-collapse"><ul id="menu-main" class="nav navbar-nav"><li id="menu-item-12" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12"><a href="https://www.stevejgordon.co.uk/about">About Me</a></li>
553<li id="menu-item-150" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-150"><a href="https://www.stevejgordon.co.uk/?page_id=148">Contact</a></li>
554<li id="menu-item-2438" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2438"><a href="https://www.stevejgordon.co.uk/subscribe-for-updates">Subscribe</a></li>
555</ul></div>
556
557
558					</div>
559				</div>
560			</div>
561		</nav><!-- .site-navigation -->
562	</header><!-- #masthead -->
563
564	<div id="content" class="site-content">
565
566		<div class="top-section">
567								</div>
568
569		<div class="container main-content-area">
570						<div class="row side-pull-left">
571				<div class="main-content-inner col-sm-12 col-md-8">
572
573	<div id="primary" class="content-area">
574		<main id="main" class="site-main" role="main">
575
576		
577<article id="post-3213" class="post-3213 post type-post status-publish format-standard hentry category-net tag-encryption tag-json tag-system-text-json tag-typeinforesolver">
578	<div class="blog-item-wrap">
579				<a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2" title="Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 2)" >
580							</a>
581		<div class="post-inner-content">
582			<header class="entry-header page-header">
583
584				<h2 class="entry-title"><a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2" rel="bookmark">Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 2)</a></h2>
585
586								<div class="entry-meta">
587					<span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2" rel="bookmark"><time class="entry-date published" datetime="2026-02-05T15:15:17+00:00">5th February 2026</time><time class="updated" datetime="2026-02-05T15:15:18+00:00">5th February 2026</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://www.stevejgordon.co.uk/author/stevejgordon">Steve Gordon</a></span></span>
588				
589				</div><!-- .entry-meta -->
590							</header><!-- .entry-header -->
591
592						<div class="entry-content">
593
594				<p>In the previous post, we discussed the foundations for automatic data encryption of properties during serialisation using System.Text.Json. In this post, we&#8217;ll continue our journey, moving toward removing our fake &#8220;encryption&#8221; and replacing it with actual encryption. Along the way we&#8217;ll establish some abstractions and a design that allows us to develop flexible encryption and [&hellip;]</p>
595					<p><a class="btn btn-default read-more" href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2" title="Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 2)">Read More</a></p>
596				
597							</div><!-- .entry-content -->
598					</div>
599	</div>
600</article><!-- #post-## -->
601
602<article id="post-3198" class="post-3198 post type-post status-publish format-standard hentry category-asp-net-core">
603	<div class="blog-item-wrap">
604				<a href="https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes" title="The Grand Mystery of the Missing 18 Bytes" >
605							</a>
606		<div class="post-inner-content">
607			<header class="entry-header page-header">
608
609				<h2 class="entry-title"><a href="https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes" rel="bookmark">The Grand Mystery of the Missing 18 Bytes</a></h2>
610
611								<div class="entry-meta">
612					<span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes" rel="bookmark"><time class="entry-date published" datetime="2026-01-28T15:33:29+00:00">28th January 2026</time><time class="updated" datetime="2026-01-28T15:33:30+00:00">28th January 2026</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://www.stevejgordon.co.uk/author/stevejgordon">Steve Gordon</a></span></span>
613				
614				</div><!-- .entry-meta -->
615							</header><!-- .entry-header -->
616
617						<div class="entry-content">
618
619				<p>In this brief blog post, I will share the tale of the mystery surrounding the missing 18 bytes. While preparing a new conference session on practical application performance optimisation, I reviewed my demo, which includes taking memory profiles as well as benchmarks during the performance optimisation loop. I like to be prepared for any and [&hellip;]</p>
620					<p><a class="btn btn-default read-more" href="https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes" title="The Grand Mystery of the Missing 18 Bytes">Read More</a></p>
621				
622							</div><!-- .entry-content -->
623					</div>
624	</div>
625</article><!-- #post-## -->
626
627<article id="post-3180" class="post-3180 post type-post status-publish format-standard hentry category-asp-net-core">
628	<div class="blog-item-wrap">
629				<a href="https://www.stevejgordon.co.uk/talk-application-performance-optimisation-in-practice-60-mins" title="Talk: Application Performance Optimisation in Practice (60 mins)" >
630							</a>
631		<div class="post-inner-content">
632			<header class="entry-header page-header">
633
634				<h2 class="entry-title"><a href="https://www.stevejgordon.co.uk/talk-application-performance-optimisation-in-practice-60-mins" rel="bookmark">Talk: Application Performance Optimisation in Practice (60 mins)</a></h2>
635
636								<div class="entry-meta">
637					<span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://www.stevejgordon.co.uk/talk-application-performance-optimisation-in-practice-60-mins" rel="bookmark"><time class="entry-date published" datetime="2026-01-27T16:31:56+00:00">27th January 2026</time><time class="updated" datetime="2026-01-27T16:38:51+00:00">27th January 2026</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://www.stevejgordon.co.uk/author/stevejgordon">Steve Gordon</a></span></span>
638				
639				</div><!-- .entry-meta -->
640							</header><!-- .entry-header -->
641
642						<div class="entry-content">
643
644				<p>Abstract Application performance always matters. Sometimes critically, sometimes subtly, but it’s never irrelevant. While many developers rightly caution that “premature optimisation is the root of all evil,” the opposite mistake, ignoring performance until it becomes a serious issue, can be just as problematic. This talk explores the practical aspects of performance optimisation in .NET. We’ll [&hellip;]</p>
645					<p><a class="btn btn-default read-more" href="https://www.stevejgordon.co.uk/talk-application-performance-optimisation-in-practice-60-mins" title="Talk: Application Performance Optimisation in Practice (60 mins)">Read More</a></p>
646				
647							</div><!-- .entry-content -->
648					</div>
649	</div>
650</article><!-- #post-## -->
651
652<article id="post-3171" class="post-3171 post type-post status-publish format-standard has-post-thumbnail hentry category-net tag-encryption tag-json tag-system-text-json tag-typeinforesolver">
653	<div class="blog-item-wrap">
654				<a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-1" title="Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 1)" >
655				<img width="750" height="410" src="https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier-750x410.png" class="single-featured wp-post-image" alt="Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier header image" decoding="async" fetchpriority="high" srcset="https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier-750x410.png 750w, https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier-300x164.png 300w, https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier-1024x559.png 1024w, https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier-768x419.png 768w, https://www.stevejgordon.co.uk/wp-content/uploads/2026/01/Encrypting-Properties-with-System.Text_.Json-and-a-TypeInfoResolver-Modifier.png 1123w" sizes="(max-width: 750px) 100v
655w, 750px" />			</a>
656		<div class="post-inner-content">
657			<header class="entry-header page-header">
658
659				<h2 class="entry-title"><a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-1" rel="bookmark">Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 1)</a></h2>
660
661								<div class="entry-meta">
662					<span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-1" rel="bookmark"><time class="entry-date published" datetime="2026-01-14T15:09:54+00:00">14th January 2026</time><time class="updated" datetime="2026-01-14T15:14:54+00:00">14th January 2026</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://www.stevejgordon.co.uk/author/stevejgordon">Steve Gordon</a></span></span>
663				
664				</div><!-- .entry-meta -->
665							</header><!-- .entry-header -->
666
667						<div class="entry-content">
668
669				<p>In this multi-part blog series, we&#8217;ll build a reasonably full-featured code base for automatically encrypting/decrypting specific properties on types that are being serialised and deserialised using System.Text.Json. In future posts, we&#8217;ll eventually build up to a solution that utilises Azure Key Vault to secure the encryption key protecting the data. Today, we&#8217;ll begin with some [&hellip;]</p>
670					<p><a class="btn btn-default read-more" href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-1" title="Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 1)">Read More</a></p>
671				
672							</div><!-- .entry-content -->
673					</div>
674	</div>
675</article><!-- #post-## -->
676
677<article id="post-3123" class="post-3123 post type-post status-publish format-standard has-post-thumbnail hentry category-net tag-net tag-corehost tag-dotnet-exe tag-hostfxr tag-internals tag-muxer tag-runtime">
678	<div class="blog-item-wrap">
679				<a href="https://www.stevejgordon.co.uk/how-dotnet-muxer-resolves-and-loads-the-hostfxr-library" title="How dotnet.exe resolves and loads the hostfxr library &#8211; Exploring the .NET muxer" >
680				<img width="750" height="410" src="https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library-750x410.png" class="single-featured wp-post-image" alt="Blog post header image with the title &quot;How dotnet.exe resolves and loads the hostfxr library&quot;" decoding="async" srcset="https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library-750x410.png 750w, https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library-300x164.png 300w, https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library-1024x559.png 1024w, https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library-768x419.png 768w, https://www.stevejgordon.co.uk/wp-content/uploads/2024/11/How-dotnet.exe-resolves-and-loads-the-hostfxr-library.png 1123w" sizes="(max-width: 750px) 100vw, 750px" />			</a>
681		<div class="post-inner-content">
682			<header class="entry-header page-header">
683
684				<h2 class="entry-title"><a href="https://www.stevejgordon.co.uk/how-dotnet-muxer-resolves-and-loads-the-hostfxr-library" rel="bookmark">How dotnet.exe resolves and loads the hostfxr library &#8211; Exploring the .NET muxer</a></h2>
685
686								<div class="entry-meta">
687					<span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://www.stevejgordon.co.uk/how-dotnet-muxer-resolves-and-loads-the-hostfxr-library" rel="bookmark"><time class="entry-date published" datetime="2024-11-08T10:11:59+00:00">8th November 2024</time><time class="updated" datetime="2024-11-08T10:19:28+00:00">8th November 2024</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://www.stevejgordon.co.uk/author/stevejgordon">Steve Gordon</a></span></span>
688				
689				</div><!-- .entry-meta -->
690							</header><!-- .entry-header -->
691
692						<div class="entry-content">
693
694				<p>
694In this post, we will continue our journey into the functionality and implementation of dotnet.exe, specifically focusing on how the hostfxr library is resolved and loaded. This post follows part one of this series, &#8220;A Brief Introduction to the .NET Muxer (aka dotnet.exe)&#8220;. Note: These posts are a deep dive into .NET internals and won’t [&hellip;]</p>
695					<p><a class="btn btn-default read-more" href="https://www.stevejgordon.co.uk/how-dotnet-muxer-resolves-and-loads-the-hostfxr-library" title="How dotnet.exe resolves and loads the hostfxr library &#8211; Exploring the .NET muxer">Read More</a></p>
696				
697							</div><!-- .entry-content -->
698					</div>
699	</div>
700</article><!-- #post-## -->
701
702	<nav class="navigation pagination" aria-label="Posts pagination">
703		<h2 class="screen-reader-text">Posts pagination</h2>
704		<div class="nav-links"><span aria-current="page" class="page-numbers current">1</span>
705<a class="page-numbers" href="https://www.stevejgordon.co.uk/page/2">2</a>
706<span class="page-numbers dots">&hellip;</span>
707<a class="page-numbers" href="https://www.stevejgordon.co.uk/page/36">36</a>
708<a class="next page-numbers" href="https://www.stevejgordon.co.uk/page/2">Older posts <i class="fa fa-chevron-right"></i></a></div>
709	</nav>
710		</main><!-- #main -->
711	</div><!-- #primary -->
712
713</div><!-- close .main-content-inner -->
714<div id="secondary" class="widget-area col-sm-12 col-md-4" role="complementary">
715	<div class="well">
716				<aside id="widget_sp_image-2" class="widget widget_sp_image"><img width="600" height="601" class="attachment-full aligncenter" style="max-width: 100%;" srcset="https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left.png 600w, https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left-150x150.png 150w, https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left-300x300.png 300w, https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left-60x60.png 60w" sizes="(max-width: 600px) 100vw, 600px" src="https://www.stevejgordon.co.uk/wp-content/uploads/2019/03/Portrait-Small-Facing-Left.png" /></aside><aside id="custom_html-3" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><a href="https://mvp.microsoft.com/en-us/PublicProfile/5002866"><img src="https://www.stevejgordon.co.uk/wp-content/uploads/2017/11/MVP_Logo_Horizontal_Preferred_Cyan300_RGB_300ppi.png" /></a></div></aside><aside id="custom_html-11" class="widget_text widget widget_custom_html"><h3 class="widget-title">Pluralsight Courses</h3><div class="textwidget custom-html-widget"><a href="https://pluralsight.pxf.io/AavkN"><img src="https://www.stevejgordon.co.uk/wp-content/uploads/2019/09/pluralsight.png" /></a> 
717<div class="widget">
718<br/>
719<ul>
720	<li><a href="https://pluralsight.pxf.io/k0zbg0">
721Creating Background Services in ASP.NET Core and .NET
722			</a>
723		</li>
724			<li><a href="https://pluralsight.pxf.io/oqzbRo">
725Dependency Injection in ASP.NET Core 6
726			</a>
727		</li>
728			<li><a href="https://pluralsight.pxf.io/XYdZyG">Configuration and Options in ASP.NET Core 6</a></li>
729		<li><a href="https://pluralsight.pxf.io/rnr99d">
730String Manipulation and Regex in C#10
731			</a>
732		</li>	
733	<li><a href="https://pluralsight.pxf.io/m5zbR7">
734String Manipulation in C#: Best Practices
735			</a>
736		</li>
737		<li><a href="https://pluralsight.pxf.io/PyKk0j">Integration Testing ASP.NET Core Applications: Best Practices
738			</a>
739		</li>
740		<li><a href="https://pluralsight.pxf.io/1r1O5D">
741Implementing Cross-cutting Concerns for ASP.NET Core Microservices
742			</a>
743		</li>
744	</ul>
745	</div></div></aside><aside id="sparkling-social-2" class="widget sparkling-social"><h3 class="widget-title">Follow me</h3>
746		<!-- social icons -->
747		<div class="social-icons sticky-sidebar-social">
748
749			<nav id="menu-social" class="social-icons"><ul id="menu-social-items" class="social-menu"><li id="menu-item-73" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-73"><a target="_blank" href="https://twitter.com/stevejgordon"><i class="social_icon"><span>Twitter</span></i></a></li>
750<li id="menu-item-74" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-74"><a target="_blank" href="https://github.com/stevejgordon"><i class="social_icon"><span>Github</span></i></a></li>
751<li id="menu-item-510" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-510"><a href="https://www.linkedin.com/in/steve-gordon-a6691114/"><i class="social_icon"><span>LinkedIn</span></i></a></li>
752<li id="menu-item-1066" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1066"><a href="https://www.youtube.com/channel/UC_rMpypHGP8_J8AAo_bLCmA?&#038;ytbChannel=null"><i class="social_icon"><span>YouTube</span></i></a></li>
753<li id="menu-item-2977" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2977"><a rel="me" href="https://fosstodon.org/@stevejgordon"><i class="social_icon"><span>Mastodon</span></i></a></li>
754</ul></nav>
755		</div><!-- end social icons -->
756		</aside><aside id="mailerlite_widget-2" class="widget widget_mailerlite_widget">                <div class="ml-form-embed"
757                     data-account="2206765:i6t8a5v9b2"
758                     data-form="2369968:y6z1y1">
759                </div>
760            </aside><aside id="custom_html-8" class="widget_text widget widget_custom_html"><h3 class="widget-title">Support This Blog</h3><div class="textwidget custom-html-widget"><p><a href="https://www.patreon.com/bePatron?u=25212205" data-patreon-widget-type="become-patron-button">Become a Patron!</a>
760<script async src="https://c6.patreon.com/becomePatronButton.bundle.js"></script>
760
761</p>
762<p>
763	<style>.bmc-button img{width: 35px !important;margin-bottom: 1px !important;box-shadow: none !important;border: none !important;vertical-align: middle !important;}.bmc-button{padding: 7px 10px 7px 10px !important;line-height: 35px !important;height:51px !important;min-width:217px !important;text-decoration: none !important;display:inline-flex !important;color:#FFFFFF !important;background-color:#FF813F !important;border-radius: 5px !important;border: 1px solid transparent !important;padding: 7px 10px 7px 10px !important;font-size: 20px !important;letter-spacing:-0.08px !important;box-shadow: 0px 1px 2px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 1px 2px 2px rgba(190, 190, 190, 0.5) !important;margin: 0 auto !important;font-family:'Lato', sans-serif !important;-webkit-box-sizing: border-box !important;box-sizing: border-box !important;-o-transition: 0.3s all linear !important;-webkit-transition: 0.3s all linear !important;-moz-transition: 0.3s all linear !important;-ms-transition: 0.3s all linear !important;transition: 0.3s all linear !important;}.bmc-button:hover, .bmc-button:active, .bmc-button:focus {-webkit-box-shadow: 0px 1px 2px 2px rgba(190, 190, 190, 0.5) !important;text-decoration: none !important;box-shadow: 0px 1px 2px 2px rgba(190, 190, 190, 0.5) !important;opacity: 0.85 !important;color:#FFFFFF !important;}</style><link href="https://fonts.googleapis.com/css?family=Lato&subset=latin,latin-ext" rel="stylesheet"><a class="bmc-button" target="_blank" href="https://www.buymeacoffee.com/stevejgordon"><img src="https://cdn.buymeacoffee.com/buttons/bmc-new-btn-logo.svg" alt="Support this blog!"><span style="margin-left:15px;font-size:19px !important;">Buy me a coffee!</span></a>
764</p>
765</div></aside><aside id="search-2" class="widget widget_search">
766<form role="search" method="get" class="form-search" action="https://www.stevejgordon.co.uk/">
767  <div class="input-group">
768	  <label class="screen-reader-text" for="s">Search for:</label>
769	<input type="text" class="form-control search-query" placeholder="Search&hellip;" value="" name="s" title="Search for:" />
770	<span class="input-group-btn">
771	  <button type="submit" class="btn btn-default" name="submit" id="searchsubmit" value="Search"><span class="glyphicon glyphicon-search"></span></button>
772	</span>
773  </div>
774</form>
775</aside>
776		<aside id="recent-posts-2" class="widget widget_recent_entries">
777		<h3 class="widget-title">Recent Posts</h3>
778		<ul>
779											<li>
780					<a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2">Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 2)</a>
781									</li>
782											<li>
783					<a href="https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes">The Grand Mystery of the Missing 18 Bytes</a>
784									</li>
785											<li>
786					<a href="https://www.stevejgordon.co.uk/talk-application-performance-optimisation-in-practice-60-mins">Talk: Application Performance Optimisation in Practice (60 mins)</a>
787									</li>
788											<li>
789					<a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-1">Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 1)</a>
790									</li>
791											<li>
792					<a href="https://www.stevejgordon.co.uk/how-dotnet-muxer-resolves-and-loads-the-hostfxr-library">How dotnet.exe resolves and loads the hostfxr library &#8211; Exploring the .NET muxer</a>
793									</li>
794					</ul>
795
796		</aside><aside id="custom_html-4" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget">
796<script src="https://apis.google.com/js/platform.js"></script>
796
797
798<div class="g-ytsubscribe" data-channelid="UC_rMpypHGP8_J8AAo_bLCmA" data-layout="default" data-count="default"></div></div></aside><aside id="text-3" class="widget widget_text"><h3 class="widget-title">.NET South East</h3>			<div class="textwidget"><p><a href="https://www.meetup.com/dotnetsoutheast/"><img decoding="async" src="https://www.stevejgordon.co.uk/wp-content/uploads/2017/07/cropped-logo.png" /></a></p>
799<p>Please come and join our new .NET User  Group in Brighton, UK.</p>
800</div>
801		</aside><aside id="categories-2" class="widget widget_categories"><h3 class="widget-title">Categories</h3><form action="https://www.stevejgordon.co.uk" method="get"><label class="screen-reader-text" for="cat">Categories</label><select  name='cat' id='cat' class='postform'>
802	<option value='-1'>Select Category</option>
803	<option class="level-0" value="375">.NET&nbsp;&nbsp;(35)</option>
804	<option class="level-0" value="434">.NET 5&nbsp;&nbsp;(3)</option>
805	<option class="level-0" value="496">.NET 6&nbsp;&nbsp;(2)</option>
806	<option class="level-0" value="517">.NET 8&nbsp;&nbsp;(2)</option>
807	<option class="level-0" value="542">.NET 9&nbsp;&nbsp;(2)</option>
808	<option class="level-0" value="223">.NET Core&nbsp;&nbsp;(26)</option>
809	<option class="level-0" value="381">.NET Core 3.0&nbsp;&nbsp;(5)</option>
810	<option class="level-0" value="113">.NET South East&nbsp;&nbsp;(6)</option>
811	<option class="level-0" value="18">allReady&nbsp;&nbsp;(11)</option>
812	<option class="level-0" value="4">ASP.NET Core&nbsp;&nbsp;(86)</option>
813	<option class="level-0" value="219">ASP.NET Core 2.1&nbsp;&nbsp;(7)</option>
814	<option class="level-0" value="289">ASP.NET Core 2.2&nbsp;&nbsp;(2)</option>
815	<option class="level-0" value="365">ASP.NET Core 3.0&nbsp;&nbsp;(6)</option>
816	<option class="level-0" value="429">ASP.NET Core 3.1&nbsp;&nbsp;(1)</option>
817	<option class="level-0" value="435">ASP.NET Core 5.0&nbsp;&nbsp;(2)</option>
818	<option class="level-0" value="66">ASP.NET Core Anatomy&nbsp;&nbsp;(6)</option>
819	<option class="level-0" value="8">ASP.NET Identity&nbsp;&nbsp;(2)</option>
820	<option class="level-0" value="90">AWS&nbsp;&nbsp;(11)</option>
821	<option class="level-0" value="313">C#&nbsp;&nbsp;(10)</option>
822	<option class="level-0" value="228">Dependency Injection&nbsp;&nbsp;(5)</option>
823	<option class="level-0" value="89">Docker&nbsp;&nbsp;(11)</option>
824	<option class="level-0" value="477">Elasticsearch&nbsp;&nbsp;(1)</option>
825	<option class="level-0" value="25">Entity Framework Core&nbsp;&nbsp;(1)</option>
826	<option class="level-0" value="3">General&nbsp;&nbsp;(5)</option>
827	<option class="level-0" value="179">Git and GitHub&nbsp;&nbsp;(2)</option>
828	<option class="level-0" value="17">GitHub&nbsp;&nbsp;(5)</option>
829	<option class="level-0" value="372">gRPC&nbsp;&nbsp;(3)</option>
830	<option class="level-0" value="346">HttpClient&nbsp;&nbsp;(2)</option>
831	<option class="level-0" value="268">Microservices&nbsp;&nbsp;(1)</option>
832	<option class="level-0" value="157">Microsoft MVP&nbsp;&nbsp;(1)</option>
833	<option class="level-0" value="535">OpenTelemetry&nbsp;&nbsp;(2)</option>
834	<option class="level-0" value="318">Performance&nbsp;&nbsp;(13)</option>
835	<option class="level-0" value="280">Polly&nbsp;&nbsp;(2)</option>
836	<option class="level-0" value="508">Roslyn APIs&nbsp;&nbsp;(1)</option>
837	<option class="level-0" value="422">Software Development Skills&nbsp;&nbsp;(4)</option>
838	<option class="level-0" value="110">Speaking&nbsp;&nbsp;(3)</option>
839	<option class="level-0" value="40">Things I&#8217;ve Learnt This Week&nbsp;&nbsp;(11)</option>
840	<option class="level-0" value="168">Video Production&nbsp;&nbsp;(1)</option>
841	<option class="level-0" value="67">Visual Studio&nbsp;&nbsp;(1)</option>
842	<option class="level-0" value="33">Visual Studio 2017&nbsp;&nbsp;(4)</option>
843</select>
844</form>
844<script type="text/javascript">
845/* <![CDATA[ */
846
847(function() {
848	var dropdown = document.getElementById( "cat" );
849	function onCatChange() {
850		if ( dropdown.options[ dropdown.selectedIndex ].value > 0 ) {
851			dropdown.parentNode.submit();
852		}
853	}
854	dropdown.onchange = onCatChange;
855})();
856
857/* ]]> */
858</script>
858
859</aside><aside id="archives-2" class="widget widget_archive"><h3 class="widget-title">Archives</h3>		<label class="screen-reader-text" for="archives-dropdown-2">Archives</label>
860		<select id="archives-dropdown-2" name="archive-dropdown">
861			
862			<option value="">Select Month</option>
863				<option value='https://www.stevejgordon.co.uk/2026/02'> February 2026 &nbsp;(1)</option>
864	<option value='https://www.stevejgordon.co.uk/2026/01'> January 2026 &nbsp;(3)</option>
865	<option value='https://www.stevejgordon.co.uk/2024/11'> November 2024 &nbsp;(1)</option>
866	<option value='https://www.stevejgordon.co.uk/2024/10'> October 2024 &nbsp;(3)</option>
867	<option value='https://www.stevejgordon.co.uk/2024/09'> September 2024 &nbsp;(2)</option>
868	<option value='https://www.stevejgordon.co.uk/2024/03'> March 2024 &nbsp;(1)</option>
869	<option value='https://www.stevejgordon.co.uk/2024/01'> January 2024 &nbsp;(1)</option>
870	<option value='https://www.stevejgordon.co.uk/2023/11'> November 2023 &nbsp;(2)</option>
871	<option value='https://www.stevejgordon.co.uk/2023/08'> August 2023 &nbsp;(1)</option>
872	<option value='https://www.stevejgordon.co.uk/2023/05'> May 2023 &nbsp;(1)</option>
873	<option value='https://www.stevejgordon.co.uk/2022/10'> October 2022 &nbsp;(1)</option>
874	<option value='https://www.stevejgordon.co.uk/2022/06'> June 2022 &nbsp;(1)</option>
875	<option value='https://www.stevejgordon.co.uk/2022/04'> April 2022 &nbsp;(1)</option>
876	<option value='https://www.stevejgordon.co.uk/2021/12'> December 2021 &nbsp;(1)</option>
877	<option value='https://www.stevejgordon.co.uk/2021/08'> August 2021 &nbsp;(1)</option>
878	<option value='https://www.stevejgordon.co.uk/2021/07'> July 2021 &nbsp;(3)</option>
879	<option value='https://www.stevejgordon.co.uk/2021/05'> May 2021 &nbsp;(3)</option>
880	<option value='https://www.stevejgordon.co.uk/2021/03'> March 2021 &nbsp;(1)</option>
881	<option value='https://www.stevejgordon.co.uk/2021/02'> February 2021 &nbsp;(3)</option>
882	<option value='https://www.stevejgordon.co.uk/2021/01'> January 2021 &nbsp;(1)</option>
883	<option value='https://www.stevejgordon.co.uk/2020/12'> December 2020 &nbsp;(1)</option>
884	<option value='https://www.stevejgordon.co.uk/2020/10'> October 2020 &nbsp;(4)</option>
885	<option value='https://www.stevejgordon.co.uk/2020/09'> September 2020 &nbsp;(1)</option>
886	<option value='https://www.stevejgordon.co.uk/2020/08'> August 2020 &nbsp;(1)</option>
887	<option value='https://www.stevejgordon.co.uk/2020/07'> July 2020 &nbsp;(3)</option>
888	<option value='https://www.stevejgordon.co.uk/2020/05'> May 2020 &nbsp;(2)</option>
889	<option value='https://www.stevejgordon.co.uk/2020/04'> April 2020 &nbsp;(4)</option>
890	<option value='https://www.stevejgordon.co.uk/2020/03'> March 2020 &nbsp;(7)</option>
891	<option value='https://www.stevejgordon.co.uk/2020/02'> February 2020 &nbsp;(1)</option>
892	<option value='https://www.stevejgordon.co.uk/2020/01'> January 2020 &nbsp;(5)</option>
893	<option value='https://www.stevejgordon.co.uk/2019/11'> November 2019 &nbsp;(3)</option>
894	<option value='https://www.stevejgordon.co.uk/2019/10'> October 2019 &nbsp;(3)</option>
895	<option value='https://www.stevejgordon.co.uk/2019/09'> September 2019 &nbsp;(3)</option>
896	<option value='https://www.stevejgordon.co.uk/2019/08'> August 2019 &nbsp;(2)</option>
897	<option value='https://www.stevejgordon.co.uk/2019/06'> June 2019 &nbsp;(2)</option>
898	<option value='https://www.stevejgordon.co.uk/2019/05'> May 2019 &nbsp;(4)</option>
899	<option value='https://www.stevejgordon.co.uk/2019/04'> April 2019 &nbsp;(1)</option>
900	<option value='https://www.stevejgordon.co.uk/2019/03'> March 2019 &nbsp;(2)</option>
901	<option value='https://www.stevejgordon.co.uk/2019/02'> February 2019 &nbsp;(5)</option>
902	<option value='https://www.stevejgordon.co.uk/2019/01'> January 2019 &nbsp;(2)</option>
903	<option value='https://www.stevejgordon.co.uk/2018/11'> November 2018 &nbsp;(1)</option>
904	<option value='https://www.stevejgordon.co.uk/2018/10'> October 2018 &nbsp;(1)</option>
905	<option value='https://www.stevejgordon.co.uk/2018/09'> September 2018 &nbsp;(1)</option>
906	<option value='https://www.stevejgordon.co.uk/2018/08'> August 2018 &nbsp;(2)</option>
907	<option value='https://www.stevejgordon.co.uk/2018/07'> July 2018 &nbsp;(2)</option>
908	<option value='https://www.stevejgordon.co.uk/2018/06'> June 2018 &nbsp;(3)</option>
909	<option value='https://www.stevejgordon.co.uk/2018/05'> May 2018 &nbsp;(4)</option>
910	<option value='https://www.stevejgordon.co.uk/2018/04'> April 2018 &nbsp;(3)</option>
911	<option value='https://www.stevejgordon.co.uk/2018/03'> March 2018 &nbsp;(2)</option>
912	<option value='https://www.stevejgordon.co.uk/2018/02'> February 2018 &nbsp;(2)</option>
913	<option value='https://www.stevejgordon.co.uk/2018/01'> January 2018 &nbsp;(8)</option>
914	<option value='https://www.stevejgordon.co.uk/2017/12'> December 2017 &nbsp;(4)</option>
915	<option value='https://www.stevejgordon.co.uk/2017/11'> November 2017 &nbsp;(2)</option>
916	<option value='https://www.stevejgordon.co.uk/2017/10'> October 2017 &nbsp;(3)</option>
917	<option value='https://www.stevejgordon.co.uk/2017/09'> September 2017 &nbsp;(2)</option>
918	<option value='https://www.stevejgordon.co.uk/2017/08'> August 2017 &nbsp;(2)</option>
919	<option value='https://www.stevejgordon.co.uk/2017/07'> July 2017 &nbsp;(4)</option>
920	<option value='https://www.stevejgordon.co.uk/2017/06'> June 2017 &nbsp;(4)</option>
921	<option value='https://www.stevejgordon.co.uk/2017/05'> May 2017 &nbsp;(5)</option>
922	<option value='https://www.stevejgordon.co.uk/2017/04'> April 2017 &nbsp;(3)</option>
923	<option value='https://www.stevejgordon.co.uk/2017/03'> March 2017 &nbsp;(9)</option>
924	<option value='https://www.stevejgordon.co.uk/2017/02'> February 2017 &nbsp;(6)</option>
925	<option value='https://www.stevejgordon.co.uk/2017/01'> January 2017 &nbsp;(1)</option>
926	<option value='https://www.stevejgordon.co.uk/2016/12'> December 2016 &nbsp;(2)</option>
927	<option value='https://www.stevejgordon.co.uk/2016/11'> November 2016 &nbsp;(2)</option>
928	<option value='https://www.stevejgordon.co.uk/2016/10'> October 2016 &nbsp;(3)</option>
929	<option value='https://www.stevejgordon.co.uk/2016/09'> September 2016 &nbsp;(1)</option>
930	<option value='https://www.stevejgordon.co.uk/2016/08'> August 2016 &nbsp;(1)</option>
931	<option value='https://www.stevejgordon.co.uk/2016/05'> May 2016 &nbsp;(1)</option>
932	<option value='https://www.stevejgordon.co.uk/2016/03'> March 2016 &nbsp;(1)</option>
933	<option value='https://www.stevejgordon.co.uk/2016/02'> February 2016 &nbsp;(3)</option>
934	<option value='https://www.stevejgordon.co.uk/2016/01'> January 2016 &nbsp;(2)</option>
935
936		</select>
937
938			
938<script type="text/javascript">
939/* <![CDATA[ */
940
941(function() {
942	var dropdown = document.getElementById( "archives-dropdown-2" );
943	function onSelectChange() {
944		if ( dropdown.options[ dropdown.selectedIndex ].value !== '' ) {
945			document.location.href = this.options[ this.selectedIndex ].value;
946		}
947	}
948	dropdown.onchange = onSelectChange;
949})();
950
951/* ]]> */
952</script>
952
953</aside>	</div>
954</div><!-- #secondary -->
955		</div><!-- close .row -->
956	</div><!-- close .container -->
957</div><!-- close .site-content -->
958
959	<div id="footer-area">
960		<div class="container footer-inner">
961			<div class="row">
962				
963				</div>
964		</div>
965
966		<footer id="colophon" class="site-footer" role="contentinfo">
967			<div class="site-info container">
968				<div class="row">
969					<nav id="menu-social" class="social-icons"><ul id="menu-social-items" class="social-menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-73"><a target="_blank" href="https://twitter.com/stevejgordon"><i class="social_icon"><span>Twitter</span></i></a></li>
970<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-74"><a target="_blank" href="https://github.com/stevejgordon"><i class="social_icon"><span>Github</span></i></a></li>
971<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-510"><a href="https://www.linkedin.com/in/steve-gordon-a6691114/"><i class="social_icon"><span>LinkedIn</span></i></a></li>
972<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1066"><a href="https://www.youtube.com/channel/UC_rMpypHGP8_J8AAo_bLCmA?&#038;ytbChannel=null"><i class="social_icon"><span>YouTube</span></i></a></li>
973<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2977"><a rel="me" href="https://fosstodon.org/@stevejgordon"><i class="social_icon"><span>Mastodon</span></i></a></li>
974</ul></nav>					<nav role="navigation" class="col-md-6">
975						<ul id="menu-social" class="nav footer-nav clearfix"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-73"><a target="_blank" href="https://twitter.com/stevejgordon">Twitter</a></li>
976<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-74"><a target="_blank" href="https://github.com/stevejgordon">Github</a></li>
977<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-510"><a href="https://www.linkedin.com/in/steve-gordon-a6691114/">LinkedIn</a></li>
978<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1066"><a href="https://www.youtube.com/channel/UC_rMpypHGP8_J8AAo_bLCmA?&#038;ytbChannel=null">YouTube</a></li>
979<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-2977"><a rel="me" href="https://fosstodon.org/@stevejgordon">Mastodon</a></li>
980</ul>					</nav>
981					<div class="copyright col-md-6">
982						Copyright © Steve Gordon 2019						Theme by <a href="http://colorlib.com/" target="_blank" rel="nofollow noopener">Colorlib</a> Powered by <a href="http://wordpress.org/" target="_blank">WordPress</a>					</div>
983				</div>
984			</div><!-- .site-info -->
985			<div class="scroll-to-top"><i class="fa fa-angle-up"></i></div>
985<!-- .scroll-to-top -->
986		</footer><!-- #colophon -->
987	</div>
988</div><!-- #page -->
989
990		
990<script type="text/javascript">
991		  jQuery(document).ready(function ($) {
992			if ($(window).width() >= 767) {
993			  $('.navbar-nav > li.menu-item > a').click(function () {
994				if ($(this).attr('target') !== '_blank') {
995				  window.location = $(this).attr('href')
996				}
997			  })
998			}
999		  })
1000		</script>
1000
1001	
1001<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-includes/js/dist/hooks.min.js?ver=4d63a3d491d11ffd8ac6" id="wp-hooks-js"></script>
vendor: 1 bytes, line 1001
1001
1002<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script>
vendor: 1 bytes, line 1002
1002
1003<script type="text/javascript" id="wp-i18n-js-after">
1004/* <![CDATA[ */
1005wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
1006/* ]]> */
1007</script>
vendor: 1 bytes, line 1007
1007
1008<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.0.5" id="swv-js"></script>
vendor: 1 bytes, line 1008
1008
1009<script type="text/javascript" id="contact-form-7-js-translations">
1010/* <![CDATA[ */
1011( function( domain, translations ) {
1012	var localeData = translations.locale_data[ domain ] || translations.locale_data.messages;
1013	localeData[""].domain = domain;
1014	wp.i18n.setLocaleData( localeData, domain );
1015} )( "contact-form-7", {"translation-revision-date":"2024-05-21 11:58:24+0000","generator":"GlotPress\/4.0.1","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_GB"},"Error:":["Error:"]}},"comment":{"reference":"includes\/js\/index.js"}} );
1016/* ]]> */
1017</script>
vendor: 1 bytes, line 1017
1017
1018<script type="text/javascript" id="contact-form-7-js-before">
1019/* <![CDATA[ */
1020var wpcf7 = {
1021    "api": {
1022        "root": "https:\/\/www.stevejgordon.co.uk\/wp-json\/",
1023        "namespace": "contact-form-7\/v1"
1024    }
1025};
1026/* ]]> */
1027</script>
vendor: 1 bytes, line 1027
1027
1028<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.0.5" id="contact-form-7-js"></script>
vendor: 1 bytes, line 1028
1028
1029<script type="text/javascript" src="https://www.stevejgordon.co.uk/wp-content/themes/sparkling/assets/js/skip-link-focus-fix.min.js?ver=20140222" id="sparkling-skip-link-focus-fix-js"></script>
1029
1030
1031</body>
1032</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.