{"id":1256,"date":"2026-03-12T08:57:43","date_gmt":"2026-03-12T11:57:43","guid":{"rendered":"https:\/\/maurobernal.com.ar\/blog\/?p=1256"},"modified":"2026-03-12T08:57:43","modified_gmt":"2026-03-12T11:57:43","slug":"csharp-12-primary-constructors-collection-expressions-dotnet8","status":"publish","type":"post","link":"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/","title":{"rendered":"C# 12: Primary Constructors, Collection Expressions y el c\u00f3digo que deber\u00eda haber existido siempre"},"content":{"rendered":"\n<p class=\"intro-destacado\">C# 12 lleg\u00f3 con .NET 8 y fue la versi\u00f3n que m\u00e1s cambi\u00f3 mi forma de escribir c\u00f3digo en el d\u00eda a d\u00eda. Los Primary Constructors me sacaron dos tercios del boilerplate de mis servicios. Las Collection Expressions me hicieron olvidar cu\u00e1ndo usar <code>new List&lt;&gt;<\/code> vs <code>new[]<\/code> vs <code>Array.Empty()<\/code>. Repaso todo lo que realmente uso.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Primary Constructors: adi\u00f3s al boilerplate de inyecci\u00f3n de dependencias<\/h2>\n\n\n\n<p>Antes de C# 12, cada servicio que necesitaba inyecci\u00f3n de dependencias requer\u00eda declarar campos privados, un constructor y asignaciones manuales. Con Primary Constructors, todo eso desaparece.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ &#x274c; Antes (C# 11 y anteriores): mucho c\u00f3digo repetitivo\npublic class PedidoService\n{\n    private readonly IRepositorio _repo;\n    private readonly ILogger&lt;PedidoService&gt; _logger;\n    private readonly IEmailService _email;\n\n    public PedidoService(\n        IRepositorio repo,\n        ILogger&lt;PedidoService&gt; logger,\n        IEmailService email)\n    {\n        _repo   = repo;\n        _logger = logger;\n        _email  = email;\n    }\n\n    public async Task ProcesarAsync(Pedido pedido)\n    {\n        _logger.LogInformation(\"Procesando pedido {Id}\", pedido.Id);\n        await _repo.GuardarAsync(pedido);\n        await _email.NotificarAsync(pedido.ClienteEmail);\n    }\n}\n\n\/\/ &#x2705; C# 12: Primary Constructor \u2014 el compilador genera el backing field\npublic class PedidoService(\n    IRepositorio repo,\n    ILogger&lt;PedidoService&gt; logger,\n    IEmailService email)\n{\n    public async Task ProcesarAsync(Pedido pedido)\n    {\n        logger.LogInformation(\"Procesando pedido {Id}\", pedido.Id);\n        await repo.GuardarAsync(pedido);\n        await email.NotificarAsync(pedido.ClienteEmail);\n    }\n}<\/code><\/pre>\n\n\n\n<p>Los par\u00e1metros del primary constructor son accesibles en todo el cuerpo de la clase. No son campos p\u00fablicos \u2014 son par\u00e1metros capturados. Si necesit\u00e1s exponerlos como propiedades, lo hac\u00e9s expl\u00edcitamente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Primary constructor en record (siempre existi\u00f3)\npublic record Producto(string Nombre, decimal Precio, int Stock);\n\n\/\/ Primary constructor en clase con propiedad expl\u00edcita\npublic class Configuracion(string connectionString, int timeout)\n{\n    public string ConnectionString { get; } = connectionString;\n    public int TimeoutSeconds { get; } = timeout > 0 ? timeout : 30;\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Collection Expressions: una sintaxis para todos los tipos de colecci\u00f3n<\/h2>\n\n\n\n<p>Antes de C# 12, la forma de inicializar una colecci\u00f3n depend\u00eda de su tipo. Un array era <code>new[] { 1, 2, 3 }<\/code>, una lista era <code>new List&lt;int&gt; { 1, 2, 3 }<\/code>, un span era algo diferente. C# 12 unifica todo con <code>[]<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ &#x2705; C# 12: misma sintaxis para todos los tipos\nint[]          array   = [1, 2, 3];\nList&lt;int&gt;      lista   = [4, 5, 6];\nSpan&lt;int&gt;      span    = [7, 8, 9];\nIEnumerable&lt;int&gt; seq  = [10, 11, 12];\nReadOnlySpan&lt;int&gt; ros  = [13, 14, 15];\n\n\/\/ Colecci\u00f3n vac\u00eda \u2014 sin ambig\u00fcedades\nList&lt;string&gt; vacia = [];   \/\/ antes: new List&lt;string&gt;() o Array.Empty&lt;string&gt;()\n\n\/\/ Spread operator (..) para combinar colecciones\nint[] primeros = [1, 2, 3];\nint[] segundos = [4, 5, 6];\nint[] todos    = [..primeros, ..segundos, 7, 8];  \/\/ [1,2,3,4,5,6,7,8]\n\n\/\/ Muy \u00fatil en APIs: combinar listas de validaci\u00f3n\nvar reglas = [..reglasBase, ..reglasEspecificas, nuevaRegla];<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Using aliases para cualquier tipo<\/h2>\n\n\n\n<p>Antes de C# 12, <code>using<\/code> solo pod\u00eda crear alias para tipos nombrados. Ahora puede crear alias para cualquier tipo: tuplas, arrays, punteros, tipos gen\u00e9ricos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ C# 12: aliases para tipos complejos\nusing Coordenadas   = (double Latitud, double Longitud);\nusing MatrizInt     = int[][];\nusing DiccionarioId = System.Collections.Generic.Dictionary&lt;int, string&gt;;\nusing Callback      = System.Action&lt;string, int&gt;;\n\n\/\/ Uso en el c\u00f3digo \u2014 mucho m\u00e1s legible\nCoordenadas ubicacion = (Latitud: -34.6037, Longitud: -58.3816);\nDiccionarioId usuarios = new() { { 1, \"Mauro\" }, { 2, \"Juan\" } };<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Inline Arrays: buffers de alto rendimiento sin unsafe<\/h2>\n\n\n\n<p>Los Inline Arrays son structs con un tama\u00f1o fijo definido en compilaci\u00f3n. Se almacenan completamente en el stack, sin asignaciones en el heap. \u00datiles para c\u00f3digo de sistema o cuando necesit\u00e1s buffers de tama\u00f1o conocido con rendimiento m\u00e1ximo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"[System.Runtime.CompilerServices.InlineArray(8)]\npublic struct Buffer8&lt;T&gt;\n{\n    private T _element; \/\/ El compilador genera 8 slots contiguos en memoria\n}\n\n\/\/ Uso: se comporta como un array pero sin allocations\nBuffer8&lt;int&gt; buffer;\nbuffer[0] = 100;\nbuffer[7] = 800;\n\/\/ Todo en el stack \u2014 el GC no ve nada de esto<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Lambdas con par\u00e1metros opcionales y params<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ C# 12: par\u00e1metros opcionales en lambdas\nvar saludar = (string nombre, string prefijo = \"Hola\") => $\"{prefijo}, {nombre}!\";\nConsole.WriteLine(saludar(\"Mauro\"));          \/\/ \"Hola, Mauro!\"\nConsole.WriteLine(saludar(\"Mauro\", \"Buenas\")); \/\/ \"Buenas, Mauro!\"\n\n\/\/ params en lambdas\nvar sumar = (params int[] numeros) => numeros.Sum();\nConsole.WriteLine(sumar(1, 2, 3, 4, 5));  \/\/ 15<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">El impacto en el c\u00f3digo real<\/h2>\n\n\n\n<p>En un proyecto de tama\u00f1o mediano que migr\u00e9 a C# 12, los Primary Constructors redujeron el c\u00f3digo de los servicios en aproximadamente un 30%. No es solo cosm\u00e9tico: menos c\u00f3digo es menos superficie de error. Las Collection Expressions eliminaron la pregunta \u00ab\u00bf<code>new List&lt;&gt;<\/code> o <code>Array.Empty&lt;&gt;<\/code>?\u00bb de los code reviews. El spread operator simplific\u00f3 docenas de patrones de concatenaci\u00f3n de listas que antes requer\u00edan <code>AddRange<\/code> o LINQ <code>Concat<\/code>.<\/p>\n\n<hr class=\"wp-block-separator\"\/>\n<p><em><a href=\"https:\/\/maurobernal.com.ar\/blog\/?p=1255\">\u2190 De .NET 8 a .NET 10: qu\u00e9 cambi\u00f3, qu\u00e9 mejor\u00f3 y por qu\u00e9 conviene actualizar ya<\/a> | <strong>Serie .NET 8 \u2192 .NET 10<\/strong> | Pr\u00f3ximo: <a href=\"https:\/\/maurobernal.com.ar\/blog\/?p=1257\">C# 13: params modernos, Lock de primera clase y Task.WhenEach \u2192<\/a><\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>C# 12 con .NET 8: Primary Constructors eliminan el boilerplate de DI, Collection Expressions unifican la sintaxis, spread operator, inline arrays y using aliases para cualquier tipo.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[202],"tags":[299,211,18,296,65,298],"class_list":["post-1256","post","type-post","status-publish","format-standard","hentry","category-dotnet","tag-collections","tag-csharp","tag-dotnet","tag-dotnet8","tag-performance","tag-primary-constructors"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>C# 12: Primary Constructors, Collection Expressions y el c\u00f3digo que deber\u00eda haber existido siempre &#183; devops Mauro Bernal<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C# 12: Primary Constructors, Collection Expressions y el c\u00f3digo que deber\u00eda haber existido siempre &#183; devops Mauro Bernal\" \/>\n<meta property=\"og:description\" content=\"C# 12 con .NET 8: Primary Constructors eliminan el boilerplate de DI, Collection Expressions unifican la sintaxis, spread operator, inline arrays y using aliases para cualquier tipo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/\" \/>\n<meta property=\"og:site_name\" content=\"devops Mauro Bernal\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-12T11:57:43+00:00\" \/>\n<meta name=\"author\" content=\"Mauro Bernal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:site\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mauro Bernal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/csharp-12-primary-constructors-collection-expressions-dotnet8\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/csharp-12-primary-constructors-collection-expressions-dotnet8\\\/\"},\"author\":{\"name\":\"Mauro Bernal\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"headline\":\"C# 12: Primary Constructors, Collection Expressions y el c\u00f3digo que deber\u00eda haber existido siempre\",\"datePublished\":\"2026-03-12T11:57:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/csharp-12-primary-constructors-collection-expressions-dotnet8\\\/\"},\"wordCount\":374,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"keywords\":[\"collections\",\"csharp\",\"dotnet\",\"dotnet8\",\"performance\",\"primary-constructors\"],\"articleSection\":[\"DotNet\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/csharp-12-primary-constructors-collection-expressions-dotnet8\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/csharp-12-primary-constructors-collection-expressions-dotnet8\\\/\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/csharp-12-primary-constructors-collection-expressions-dotnet8\\\/\",\"name\":\"C# 12: Primary Constructors, Collection Expressions y el c\u00f3digo que deber\u00eda haber existido siempre &#183; devops Mauro Bernal\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-12T11:57:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/csharp-12-primary-constructors-collection-expressions-dotnet8\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/csharp-12-primary-constructors-collection-expressions-dotnet8\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/csharp-12-primary-constructors-collection-expressions-dotnet8\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# 12: Primary Constructors, Collection Expressions y el c\u00f3digo que deber\u00eda haber existido siempre\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\",\"name\":\"devops Mauro Bernal\",\"description\":\"Cuando tu trabajo es hacer que las cosas funcionen bien...\",\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\",\"name\":\"Mauro Bernal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"width\":1740,\"height\":1740,\"caption\":\"Mauro Bernal\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\"},\"description\":\"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman\",\"sameAs\":[\"https:\\\/\\\/maurobernal.com.ar\",\"https:\\\/\\\/x.com\\\/_maurobernal\",\"https:\\\/\\\/youtube.com\\\/maurobernal\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C# 12: Primary Constructors, Collection Expressions y el c\u00f3digo que deber\u00eda haber existido siempre &#183; devops Mauro Bernal","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/","og_locale":"es_ES","og_type":"article","og_title":"C# 12: Primary Constructors, Collection Expressions y el c\u00f3digo que deber\u00eda haber existido siempre &#183; devops Mauro Bernal","og_description":"C# 12 con .NET 8: Primary Constructors eliminan el boilerplate de DI, Collection Expressions unifican la sintaxis, spread operator, inline arrays y using aliases para cualquier tipo.","og_url":"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/","og_site_name":"devops Mauro Bernal","article_published_time":"2026-03-12T11:57:43+00:00","author":"Mauro Bernal","twitter_card":"summary_large_image","twitter_creator":"@_maurobernal","twitter_site":"@_maurobernal","twitter_misc":{"Escrito por":"Mauro Bernal","Tiempo de lectura":"2 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/#article","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/"},"author":{"name":"Mauro Bernal","@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"headline":"C# 12: Primary Constructors, Collection Expressions y el c\u00f3digo que deber\u00eda haber existido siempre","datePublished":"2026-03-12T11:57:43+00:00","mainEntityOfPage":{"@id":"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/"},"wordCount":374,"commentCount":0,"publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"keywords":["collections","csharp","dotnet","dotnet8","performance","primary-constructors"],"articleSection":["DotNet"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/","url":"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/","name":"C# 12: Primary Constructors, Collection Expressions y el c\u00f3digo que deber\u00eda haber existido siempre &#183; devops Mauro Bernal","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#website"},"datePublished":"2026-03-12T11:57:43+00:00","breadcrumb":{"@id":"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/maurobernal.com.ar\/blog\/csharp-12-primary-constructors-collection-expressions-dotnet8\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/maurobernal.com.ar\/blog\/"},{"@type":"ListItem","position":2,"name":"C# 12: Primary Constructors, Collection Expressions y el c\u00f3digo que deber\u00eda haber existido siempre"}]},{"@type":"WebSite","@id":"https:\/\/maurobernal.com.ar\/blog\/#website","url":"https:\/\/maurobernal.com.ar\/blog\/","name":"devops Mauro Bernal","description":"Cuando tu trabajo es hacer que las cosas funcionen bien...","publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/maurobernal.com.ar\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283","name":"Mauro Bernal","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","url":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","contentUrl":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","width":1740,"height":1740,"caption":"Mauro Bernal"},"logo":{"@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1"},"description":"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman","sameAs":["https:\/\/maurobernal.com.ar","https:\/\/x.com\/_maurobernal","https:\/\/youtube.com\/maurobernal"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/comments?post=1256"}],"version-history":[{"count":1,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1256\/revisions"}],"predecessor-version":[{"id":1265,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1256\/revisions\/1265"}],"wp:attachment":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/media?parent=1256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/categories?post=1256"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/tags?post=1256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}