{"id":1948,"date":"2017-01-02T22:58:26","date_gmt":"2017-01-02T22:58:26","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1948"},"modified":"2025-10-09T07:27:09","modified_gmt":"2025-10-09T14:27:09","slug":"using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/","title":{"rendered":"Uso de Jil para serializaci\u00f3n JSON personalizada en el SDK .NET de Couchbase"},"content":{"rendered":"<p>Una de las nuevas caracter\u00edsticas introducidas en 2.1.0 del SDK .NET de Couchbase fue el soporte para sobreescribir el serializador por defecto con tu propio serializador personalizado extendiendo la interfaz ITypeSerializer y proporcionando tu serializador propio o favorito. En este art\u00edculo te mostraremos c\u00f3mo hacerlo y proporcionaremos un ejemplo (clonable desde <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-net-contrib\" target=\"_blank\" rel=\"noopener\">couchbase-net-contrib<\/a> proyecto en <a href=\"https:\/\/github.com\/couchbaselabs\" target=\"_blank\" rel=\"noopener\">Couchbaselabs<\/a>) utilizando un serializador JSON muy r\u00e1pido llamado Jil.<\/p>\n<p>Por defecto el .NET SDK utiliza el popular serializador JSON NewtonSoft.NET principalmente porque es un proyecto completo, ampliamente utilizado y bien soportado. En general, el rendimiento proporcionado por el NewtonSoft es lo suficientemente bueno para la mayor\u00eda de los proyectos, en algunos casos, sin embargo, es posible que desee utilizar un serializador JSON m\u00e1s r\u00e1pido como <a href=\"https:\/\/github.com\/kevin-montrose\/Jil\" target=\"_blank\" rel=\"noopener\">Jil<\/a>.<\/p>\n<p>Jil se basa en Sigil, una biblioteca de generaci\u00f3n de IL a prueba de fallos, y proporciona un serializador JSON de prop\u00f3sito general que est\u00e1 altamente optimizado y utiliza una serie de \"trucos\" para mejorar el rendimiento, como evitar las asignaciones (por lo tanto no hay GC) y optimizar el orden de acceso a los miembros para que la CPU no tenga que detenerse mientras espera valores en la memoria. M\u00e1s informaci\u00f3n sobre Jil y Sigil <a href=\"https:\/\/github.com\/kevin-montrose\/Jil\" target=\"_blank\" rel=\"noopener\">aqu\u00ed <\/a>y <a href=\"https:\/\/github.com\/kevin-montrose\/Sigil\" target=\"_blank\" rel=\"noopener\">aqu\u00ed<\/a>.<\/p>\n<h2>Pasos necesarios<\/h2>\n<p>Extender el serializador por defecto es relativamente f\u00e1cil:<\/p>\n<ol>\n<li>Primero proporciona tu propia implementaci\u00f3n de Couchbase.Core.Serializaton.ITypeSerializer.<\/li>\n<li>Luego anula el DefaultSerializer en la clase Couchbase.Configuration.Client.ClientConfiguration. Y ya est\u00e1.<\/li>\n<li>Opcionalmente, puede utilizar Web.Config o App.Config para registrar el nuevo ITypeSerializer para que SerializerFactory cree el serializador en tiempo de ejecuci\u00f3n.<\/li>\n<\/ol>\n<h2>Implementaci\u00f3n de ITypeSerializer<\/h2>\n<p>La interfaz ITypeSerializer es utilizada por el transcodificador (ITypeTranscoder) para manejar la serializaci\u00f3n y deserializaci\u00f3n del cuerpo del paquete Memcached. El transcodificador utiliza el Tipo de los par\u00e1metros gen\u00e9ricos de la operaci\u00f3n, el OperationCode de la operaci\u00f3n y las \"banderas\" codificadas dentro de la cabecera de Memcached para determinar a qu\u00e9 Tipo deserializar el cuerpo y para determinar qu\u00e9 banderas codificar el paquete durante la serializaci\u00f3n.<\/p>\n<p>Aunque parece complejo, es realmente sencillo; si el tipo del cuerpo es un objeto o primitivo (int, ulong,etc), el cuerpo se codifica con una bandera JSON y se trata como JSON. S\u00ed, \u00a1los enteros se tratan como JSON v\u00e1lido! Si el tipo del cuerpo es una cadena, se trata como una cadena y se codifica o decodifica UTF 8. Por \u00faltimo, las matrices de bytes se pasan directamente y simplemente se a\u00f1aden al paquete o se leen del paquete y se asignan al campo Value del IOperationResult, si la operaci\u00f3n tiene un cuerpo. Por tanto, cualquier valor que no sea una cadena o una matriz de bytes se serializar\u00e1 o deserializar\u00e1 utilizando el serializador ITypeSerializer.<\/p>\n<p>El ITypeSerializer tiene las siguientes firmas de m\u00e9todos que debes implementar:<\/p>\n<pre><code class=\"language-cs\">\r\n\r\npublic interface ITypeSerializer\r\n    {\r\n        T Deserialize(byte[] buffer, int offset, int length);\r\n\r\n        T Deserialize(Stream stream);\r\n\r\n        byte[] Serialize(object obj);\r\n    }\r\n\r\n <\/code><\/pre>\n<p>Una sobrecarga para Deserialize toma un Stream y la otra un array de bytes, offset y longitud. Serialize s\u00f3lo toma una referencia System.Object que es el valor a serializar en una matriz de bytes para el transporte.<\/p>\n<p>El listado de c\u00f3digo para el JilSerializer tiene este aspecto:<\/p>\n<pre><code> \r\n\r\n    public class JilSerializer : ITypeSerializer\r\n    {\r\n        ...\r\n\r\n        public T Deserialize(Stream stream)\r\n        {\r\n            using (var reader = new StreamReader(stream))\r\n            {\r\n               return JSON.Deserialize(reader, _options);\r\n            }\r\n        }\r\n\r\n        public T Deserialize(byte[] buffer, int offset, int length)\r\n        {\r\n            T value = default (T);\r\n            if (length == 0) return value;\r\n            using (var ms = new MemoryStream(buffer, offset, length))\r\n            {\r\n                using (var sr = new StreamReader(ms))\r\n                {\r\n                    if (typeof(T).IsValueType &amp;&amp; (!typeof(T).IsGenericType\r\n                        || typeof(T).GetGenericTypeDefinition() != typeof(Nullable&lt;&gt;)))\r\n                    {\r\n                        var type = typeof (Nullable&lt;&gt;).MakeGenericType(typeof (T));\r\n                        object nullableVal = JSON.Deserialize(sr, type, _options);\r\n                        value = nullableVal == null ? default(T) : (T)nullableVal;\r\n                    }\r\n                    else\r\n                    {\r\n                        value = JSON.Deserialize(sr, _options);\r\n                    }\r\n                }\r\n            }\r\n            return value;\r\n        }\r\n\r\n        public byte[] Serialize(object obj)\r\n        {\r\n            using (var ms = new MemoryStream())\r\n            {\r\n                using (var sw = new StreamWriter(ms))\r\n                {\r\n                    JSON.Serialize(obj, sw, _options);\r\n                }\r\n                return ms.ToArray();\r\n            }\r\n        }\r\n    }\r\n<\/code><\/pre>\n<p>Observe que el c\u00f3digo es casi id\u00e9ntico a la l\u00f3gica de DefaultSerializer con la excepci\u00f3n de que estamos utilizando la clase JSON de Jil en lugar de las clases de serializaci\u00f3n de Newtonsoft.NET; aunque el mecanismo de serializaci\u00f3n es diferente las reglas son las mismas.<\/p>\n<h2>Configuraci\u00f3n del SDK para utilizar el serializador personalizado<\/h2>\n<p>Como se mencion\u00f3 anteriormente, el SDK .NET de Couchbase fue actualizado en 2.1.0 para permitir serializadores personalizados, esto se hace sobreescribiendo la f\u00e1brica de serializadores por defecto en ClientConfiguration, que es s\u00f3lo una propiedad Func: cualquier cosa que coincida con la firma ser\u00e1 creada y usada para la serializaci\u00f3n. Como nota al margen, los SerializationSettings y DeserializationSettings han quedado obsoletos y ya no se utilizan.<\/p>\n<p>He aqu\u00ed un ejemplo:<\/p>\n<pre><code class=\"language-cs\">\r\n\r\nvar config = new ClientConfiguration\r\n{\r\n    Serializer = () =&gt; new JilSerializer()\r\n};\r\n \r\nvar cluster = new Cluster(config);\r\nvar bucket = cluster.OpenBucket();\r\n\r\n<\/code><\/pre>\n<p>Aunque puede proporcionar una l\u00f3gica compleja para la creaci\u00f3n del ITypeSerializer, el enfoque m\u00e1s simple es suficiente.<\/p>\n<p>Si desea utilizar SerializationFactory para instanciar el serializador, s\u00f3lo tiene que proporcionar el c\u00f3digo de inicializaci\u00f3n en su Web.Config o App.Config:<\/p>\n<pre><code class=\"language-xml\"><!--?xml version=\"1.0\" encoding=\"utf-8\" ?--><\/code><\/pre>\n<p>Para utilizar la configuraci\u00f3n personalizada en su c\u00f3digo, llamar\u00e1 al CTOR de la clase Cluster que toma una ruta de cadena que coincide con su configuraci\u00f3n:<\/p>\n<pre><code class=\"language-cs\">\r\nvar cluster = new Cluster(\"couchbaseClients\/couchbase\");\r\nvar bucket = cluster.OpenBucket();\r\n<\/code><\/pre>\n<p>Una vez hecho esto, cualquier Bucket abierto desde el objeto Cluster utilizar\u00e1 el serializador JilSerializer en lugar del serializador NewtonSoft.NET por defecto.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Con los nuevos puntos de extensi\u00f3n a\u00f1adidos al SDK .NET de Couchbase, es trivial escribir y usar serializadores JSON personalizados usando la interfaz ITypeSerializer. El serializador JSON de Jil tiene un aspecto impresionante y es f\u00e1cil de usar; \u00a1espero que alg\u00fan miembro de la comunidad cree uno para ServiceStack.Text y lo suba al proyecto Couchbase. \u00a1NET Contrib Project!<\/p>","protected":false},"excerpt":{"rendered":"<p>One of the new features introduced in 2.1.0 of the Couchbase .NET SDK was support for overriding the default serializer with your own custom serializer by extending the ITypeSerializer interface and providing your own or favorite serializer. In this article [&hellip;]<\/p>","protected":false},"author":21,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,10127,2201],"tags":[1261,1430],"ppma_author":[8970],"class_list":["post-1948","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-c-sharp","category-tools-sdks","tag-json","tag-serialization"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.5 (Yoast SEO v26.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Jil for custom JSON Serialization in the Couchbase .NET SDK<\/title>\n<meta name=\"description\" content=\"How to override the default serializer with own custom JSON serializer Jil by extending the ITypeSerializer interface and providing own serializer.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Jil for custom JSON Serialization in the Couchbase .NET SDK\" \/>\n<meta property=\"og:description\" content=\"How to override the default serializer with own custom JSON serializer Jil by extending the ITypeSerializer interface and providing own serializer.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-02T22:58:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-09T14:27:09+00:00\" \/>\n<meta name=\"author\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@jeffrysmorris\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeff Morris, Senior Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/\"},\"author\":{\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341\"},\"headline\":\"Using Jil for custom JSON Serialization in the Couchbase .NET SDK\",\"datePublished\":\"2017-01-02T22:58:26+00:00\",\"dateModified\":\"2025-10-09T14:27:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/\"},\"wordCount\":750,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"JSON\",\"serialization\"],\"articleSection\":[\".NET\",\"C#\",\"Tools &amp; SDKs\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/\",\"name\":\"Jil for custom JSON Serialization in the Couchbase .NET SDK\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-01-02T22:58:26+00:00\",\"dateModified\":\"2025-10-09T14:27:09+00:00\",\"description\":\"How to override the default serializer with own custom JSON serializer Jil by extending the ITypeSerializer interface and providing own serializer.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Jil for custom JSON Serialization in the Couchbase .NET SDK\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341\",\"name\":\"Jeff Morris, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g\",\"caption\":\"Jeff Morris, Senior Software Engineer, Couchbase\"},\"description\":\"Jeff Morris is a Senior Software Engineer at Couchbase. Prior to joining Couchbase, Jeff spent six years at Source Interlink as an Enterprise Web Architect. Jeff is responsible for the development of Couchbase SDKs and how to integrate with N1QL (query language).\",\"sameAs\":[\"https:\/\/x.com\/jeffrysmorris\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/jeff-morris\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Jil for custom JSON Serialization in the Couchbase .NET SDK","description":"C\u00f3mo reemplazar el serializador por defecto con su propio serializador JSON personalizado Jil extendiendo la interfaz ITypeSerializer y proporcionando su propio serializador.","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:\/\/www.couchbase.com\/blog\/es\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/","og_locale":"es_MX","og_type":"article","og_title":"Using Jil for custom JSON Serialization in the Couchbase .NET SDK","og_description":"How to override the default serializer with own custom JSON serializer Jil by extending the ITypeSerializer interface and providing own serializer.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-01-02T22:58:26+00:00","article_modified_time":"2025-10-09T14:27:09+00:00","author":"Jeff Morris, Senior Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@jeffrysmorris","twitter_misc":{"Written by":"Jeff Morris, Senior Software Engineer, Couchbase","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/"},"author":{"name":"Jeff Morris, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341"},"headline":"Using Jil for custom JSON Serialization in the Couchbase .NET SDK","datePublished":"2017-01-02T22:58:26+00:00","dateModified":"2025-10-09T14:27:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/"},"wordCount":750,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["JSON","serialization"],"articleSection":[".NET","C#","Tools &amp; SDKs"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/","url":"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/","name":"Jil for custom JSON Serialization in the Couchbase .NET SDK","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-01-02T22:58:26+00:00","dateModified":"2025-10-09T14:27:09+00:00","description":"C\u00f3mo reemplazar el serializador por defecto con su propio serializador JSON personalizado Jil extendiendo la interfaz ITypeSerializer y proporcionando su propio serializador.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/using-jil-for-custom-json-serialization-in-the-couchbase-net-sdk\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using Jil for custom JSON Serialization in the Couchbase .NET SDK"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/b678bdd9f7b21a33d43ea965865a3341","name":"Jeff Morris, Ingeniero Superior de Software, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/73188ee2831025d81740e12e1ed80812","url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","caption":"Jeff Morris, Senior Software Engineer, Couchbase"},"description":"Jeff Morris es Ingeniero de Software Senior en Couchbase. Antes de unirse a Couchbase, Jeff pas\u00f3 seis a\u00f1os en Source Interlink como Arquitecto Web Empresarial. Jeff es responsable del desarrollo de los SDK de Couchbase y de c\u00f3mo integrarse con N1QL (lenguaje de consulta).","sameAs":["https:\/\/x.com\/jeffrysmorris"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/jeff-morris\/"}]}},"authors":[{"term_id":8970,"user_id":21,"is_guest":0,"slug":"jeff-morris","display_name":"Jeff Morris, Senior Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/5f910befdbd58de8bac85293df7f544680843061ecc921ba7d293d6d52076ab3?s=96&d=mm&r=g","author_category":"","last_name":"Jeff Morris, Senior Software Engineer, Couchbase","first_name":"Jeff","job_title":"","user_url":"","description":"Jeff Morris es Ingeniero de Software Senior en Couchbase. Antes de unirse a Couchbase, Jeff pas\u00f3 seis a\u00f1os en Source Interlink como Arquitecto Web Empresarial. Jeff es responsable del desarrollo de los SDK de Couchbase y de c\u00f3mo integrarse con N1QL (lenguaje de consulta)."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1948","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1948"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1948\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=1948"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1948"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1948"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}