{"id":143628,"date":"2021-05-07T09:42:05","date_gmt":"2021-05-07T08:42:05","guid":{"rendered":"https:\/\/blog.jetbrains.com\/kotlin\/2021\/05\/kotlinx-serialization-1-2-released\/"},"modified":"2021-05-20T02:42:35","modified_gmt":"2021-05-20T01:42:35","slug":"kotlinx-serialization-1-2-released","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/es\/kotlin\/2021\/05\/kotlinx-serialization-1-2-released\/","title":{"rendered":"Lanzamos kotlinx.serialization 1.2: gesti\u00f3n de JSON a alta velocidad, compatibilidad con clases de valores, documentos totalmente renovados y mucho m\u00e1s"},"content":{"rendered":"<p>\u00a1Ya est\u00e1 aqu\u00ed <code>kotlinx.serialization<\/code> 1.2! La versi\u00f3n m\u00e1s reciente de nuestra biblioteca de serializaci\u00f3n multiplataforma aporta numerosas mejoras. Estas son algunas de las m\u00e1s destacadas:<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/05\/kotlinx-serialization-1-2-released\/#fast-json\">La serializaci\u00f3n en JSON es m\u00e1s r\u00e1pida que nunca.<\/a> La versi\u00f3n 1.2 es hasta el doble de r\u00e1pida que las versiones anteriores al analizar JSON en objetos Kotlin de tipo seguro y convertir objetos Kotlin en sus representaciones de texto.<\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/05\/kotlinx-serialization-1-2-released\/#15-additions\">Ahora se admiten las incorporaciones al sistema de tipo Kotlin 1.5.<\/a> Las clases de valores y los n\u00fameros no firmados se pueden convertir a JSON y de vuelta como cualquier otra clase Kotlin.<\/li>\n<li>La <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/05\/kotlinx-serialization-1-2-released\/#api-docs\">nueva documentaci\u00f3n API<\/a> explica de forma sencilla todas las funcionalidades que <code>kotlinx.serialization<\/code> ofrece.<\/li>\n<\/ul>\n<p>La versi\u00f3n 1.2 tambi\u00e9n incluye nueva compatibilidad con <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/05\/kotlinx-serialization-1-2-released\/#alt-names\">nombres alternativos para campos JSON<\/a>, y ofrece un nuevo enfoque experimental que autom\u00e1ticamente <a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/05\/kotlinx-serialization-1-2-released\/#protobuf-schemas\">genera esquemas Protobuf a partir de clases Kotlin<\/a>, \u00a1una funcionalidad de la que estamos deseando recibir su feedback!<\/p>\n<p>\u00a1Veamos juntos los cambios e incorporaciones a esta nueva versi\u00f3n! Si ya est\u00e1 convencido, por supuesto puede pasar directamente a las instrucciones de actualizaci\u00f3n que encontrar\u00e1 a continuaci\u00f3n.<\/p>\n<p align=\"center\"><a class=\"jb-download-button\" title=\"Instalar\" href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/05\/kotlinx-serialization-1-2-released\/#start-using\">\u00a1Comience a utilizar kotlinx.serialization 1.2!<\/a><\/p>\n<p><iframe title=\"Reproductor de v\u00eddeo de YouTube\" src=\"https:\/\/www.youtube.com\/embed\/698I_AH8h6s\" height=\"445\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><br \/>\n<a href=\"https:\/\/www.youtube.com\/channel\/UCP7uiEZIqci43m22KDl0sNw?sub_confirmation=1\" target=\"_blank\" rel=\"noopener\">\u00a1Suscr\u00edbase al canal de YouTube de Kotlin!<\/a><\/p>\n<p><a name=\"fast-json\"><\/a><\/p>\n<h2>Codificaci\u00f3n y decodificaci\u00f3n JSON m\u00e1s r\u00e1pida que nunca<\/h2>\n<p>La capacidad de codificar clases de Kotlin en cadenas de JSON y la posibilidad de convertir cadenas de JSON en clases de Kotlin son las funcionalidades m\u00e1s utilizadas de <code>kotlinx.serialization<\/code>, y trabajamos constantemente para mejorar su rendimiento.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/Kotlinx.serialization-1.2_2-03.png\" alt=\"An\u00e1lisis de JSON con kotlinx.serialization: hasta un 55 % m\u00e1s r\u00e1pido\" \/><\/p>\n<p>La versi\u00f3n 1.2 renueva por completo la estructura interna de <code>kotlinx.serialization<\/code>, para lograr un rendimiento significativamente mejor en estas funciones esenciales. Hemos reescrito nuestro decodificador JSON (responsable de convertir texto en objetos de Kotlin), y hemos realizado optimizaciones significativas en nuestro codificador JSON (responsable de convertir los objetos Kotlin en texto).<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/Kotlinx.serialization-1.2_2-02-1.png\" alt=\"Codificaci\u00f3n de JSON con kotlinx.serialization: hasta un 339 % m\u00e1s r\u00e1pido\" \/><\/p>\n<p>Con solo actualizar a la \u00faltima versi\u00f3n de nuestra biblioteca, puede lograr hasta <em>el doble de la velocidad<\/em> en tareas de codificaci\u00f3n y decodificaci\u00f3n habituales. (Como ve, algunas de nuestras referencias internas, que se vieron particularmente afectadas por estas nuevas optimizaciones, \u00a1incluso <em>superan<\/em> esa cifra!)<\/p>\n<p>Con estos cambios, <code>kotlinx.serialization<\/code> logra (y en ocasiones supera) el mismo rendimiento que otras bibliotecas de JSON directamente sin configuraci\u00f3n adicional. Incluso los fragmentos de c\u00f3digo m\u00e1s simples se ven beneficiados por esta renovaci\u00f3n:<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">@Serializable\ndata class User(val name: String, val yearOfBirth: Int)\n\nfun main() {\n\/\/ Faster encoding...\nval data = User(\"Louis\", 1901)\nval string = Json.encodeToString(data)\nprintln(string) \/\/ {\"name\":\"Louis\",\"yearOfBirth\":1901}\n\n\/\/ ...and faster decoding!\nval obj = Json.decodeFromString(string)\nprintln(obj) \/\/ User(name=Louis, yearOfBirth=1901)\n}\n<\/pre>\n<p>El mejor modo de percibir estas mejoras es marcar referencias en su propia aplicaci\u00f3n con la versi\u00f3n m\u00e1s reciente de su biblioteca. Si desea hacerse una idea de las cifras generales de rendimiento, puede echar un vistazo a nuestras referencias internas para la <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/pull\/1354\" target=\"_blank\" rel=\"noopener\">codificaci\u00f3n<\/a> y la <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/pull\/1343\" target=\"_blank\" rel=\"noopener\">decodificaci\u00f3n<\/a>, que comparan la \u00faltima versi\u00f3n de <code>kotlinx.serialization<\/code> con la versi\u00f3n anterior.<\/p>\n<p><a name=\"15-additions\"><\/a><\/p>\n<h2>(De)serializaci\u00f3n de JSON estable para clases de valores y tipos de n\u00fameros no firmados<\/h2>\n<p>Kotlin 1.5.0 incorpora dos novedades geniales, <a href=\"https:\/\/kotlinlang.org\/docs\/inline-classes.html\" target=\"_blank\" rel=\"noopener\">clases de valores<\/a> y <a href=\"https:\/\/kotlinlang.org\/docs\/basic-types.html#unsigned-integers\" target=\"_blank\" rel=\"noopener\">tipos de enteros no firmados<\/a>, para lo cual <code>kotlinx.serialization<\/code> 1.2 ahora ofrece una excelente asistencia a la codificaci\u00f3n y decodificaci\u00f3n JSON. Echemos un vistazo m\u00e1s de cerca.<\/p>\n<h3>Compatibilidad con clases de valores<\/h3>\n<p>Las <a href=\"https:\/\/kotlinlang.org\/docs\/inline-classes.html\" target=\"_blank\" rel=\"noopener\">clases de valores<\/a> (anteriormente denominadas <em>clases en l\u00ednea<\/em>) son un modo de ajustar otro tipo Kotlin (por ejemplo, un n\u00famero) de un modo de tipo seguro sin introducir carga de tiempo de ejecuci\u00f3n adicional. Esto le ayuda a crear programas m\u00e1s expresivos y seguros sin poner en entredicho el rendimiento.<\/p>\n<p>La serializaci\u00f3n de JSON integrada en <code>kotlinx.serialization<\/code> ahora funciona con clases de valores. Al igual que en las dem\u00e1s clases de Kotlin, solo tenemos que anotar una <code>clase de valor<\/code> con <code>@Serializable<\/code>.<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">@Serializable\nvalue class Color(val rgb: Int)\n<\/pre>\n<p>Las clases de valores se almacenan (y serializan) directamente como su tipo subyacente. Podemos verlo a\u00f1adiendo un campo con un tipo de <code>clase de valor<\/code> a una <code>clase de datos<\/code> serializable, e inspeccionando su resultado:<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">@Serializable\ndata class NamedColor(val color: Color, val name: String)\n\nfun main() {\nprintln(Json.encodeToString(NamedColor(Color(0), \"black\")))\n}\n\n\/\/ {\"color\": 0, \"name\": \"black\"}\n<\/pre>\n<p>En el ejemplo anterior, <code>NamedColor<\/code> trata la <code>clase de valor<\/code> <code>Color<\/code> como la <em>primitiva subyacente<\/em> (una <code>Int<\/code>). Esto significa que disfrutar\u00e1 de la m\u00e1xima seguridad de tipo dentro de su c\u00f3digo Kotlin, y continuar\u00e1 gozando de una representaci\u00f3n serializada concisa de estos tipos, sin delimitaci\u00f3n ni anidado necesarios.<\/p>\n<p>Todav\u00eda estamos puliendo el dise\u00f1o de los serializadores personalizados, escritos a mano, para clases de valores, y de momento contin\u00faan siendo experimentales. Encontrar\u00e1 m\u00e1s informaci\u00f3n a este respecto en los <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/blob\/master\/docs\/inline-classes.md#using-inline-classes-in-your-custom-serializers\" target=\"_blank\" rel=\"noopener\">docs de GitHub<\/a>.<\/p>\n<h3>Compatibilidad con enteros no firmados<\/h3>\n<p>Los <a href=\"https:\/\/kotlinlang.org\/docs\/basic-types.html#unsigned-integers\" target=\"_blank\" rel=\"noopener\">enteros no firmados<\/a> son una incorporaci\u00f3n a la biblioteca est\u00e1ndar de Kotlin que ofrece tipos y operaciones para <em>n\u00fameros no negativos<\/em>. Con el lanzamiento de Kotlin 1.5.0 est\u00e1n disponibles los siguientes tipos de n\u00fameros no firmados:<\/p>\n<ul>\n<li><code>UByte<\/code>, con valores de 0 a 255<\/li>\n<li><code>UShort<\/code>, con valores de 0 a 65535<\/li>\n<li><code>UInt<\/code>, con valores de 0 a 2^32 \u2013 1<\/li>\n<li><code>ULong<\/code>, con valores de 0 a 2^64 \u2013 1<\/li>\n<\/ul>\n<p>El codificador y decodificador de JSON en <code>kotlinx.serialization<\/code> ahora es compatible con estos tipos directamente sin configuraci\u00f3n adicional. Al igual que otros tipos num\u00e9ricos, los valores enteros no firmados se serializar\u00e1n en su representaci\u00f3n num\u00e9rica sencilla (la misma representaci\u00f3n que ve al invocar <code>.toString<\/code>), sin truncado, ajuste de texto ni conversi\u00f3n a tipos firmados.<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">@Serializable\nclass Counter(val counted: UByte, val description: String)\n\n@Serializable\nclass BigCounter(val counted: ULong)\n\nval counted = 239.toUByte()\nprintln(Json.encodeToString(Counter(counted, \"tries\")))\n\/\/ {\"counted\":239,\"description\":\"tries\"}\n\nprintln(Json.encodeToString(BigCounter(ULong.MAX_VALUE)))\n\/\/ {\"counted\":18446744073709551615}\n<\/pre>\n<p>Tenga en cuenta que la compatibilidad con clases de valores y enteros no firmados est\u00e1 actualmente disponible para JSON. En una futura versi\u00f3n, tambi\u00e9n incorporaremos integraciones directas para CBOR y Protobuf, \u00a1est\u00e9 atento!<\/p>\n<p>Si desea mantenerse al d\u00eda de futuros lanzamientos de <code>kotlinx.serialization<\/code> y del lenguaje de programaci\u00f3n de Kotlin, <em>suscr\u00edbase al bolet\u00edn de actualizaciones de producto de Kotlin<\/em> a trav\u00e9s del formulario que encontrar\u00e1 junto a este art\u00edculo.<\/p>\n<p>Para obtener informaci\u00f3n detallada acerca del uso de clases de valores y tipos no firmados con <code>kotlinx.serialization<\/code>, eche un vistazo a la <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/blob\/master\/docs\/inline-classes.md\" target=\"_blank\" rel=\"noopener\">documentaci\u00f3n de GitHub<\/a>.<\/p>\n<p><a name=\"alt-names\"><\/a><\/p>\n<h2>Compatibilidad con nombres alternativos para campos JSON<\/h2>\n<p>A veces necesita analizar campos JSON que tienen distintos nombres pero el mismo significado, por ejemplo, para mantener la compatibilidad retroactiva. Con la nueva anotaci\u00f3n <code>@JsonNames<\/code>, ahora puede dar nombres alternativos a los campos JSON, lo cual se utilizar\u00e1 durante el proceso de decodificaci\u00f3n.<\/p>\n<p>Para ilustrarlo, veamos un ejemplo. Imaginemos que, dependiendo de su versi\u00f3n, un servidor nos da una de las dos respuestas siguientes:<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">{\"name\":\"kotlinx.serialization\"}\n\/* ...or: *\/\n{\"title\":\"kotlinx.serialization\"}\n<\/pre>\n<p><code>name<\/code> y <code>title<\/code> tienen el mismo significado, y queremos mapearlas al mismo campo en nuestra clase Kotlin. Con la nueva anotaci\u00f3n <code>@JsonNames<\/code>, podemos especificar <code>title<\/code> como clave alternativa para la clave <code>name<\/code>:<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">@Serializable\ndata class Project(@JsonNames(\"title\") val name: String)\n<\/pre>\n<p>F\u00edjese en la diferencia con la anotaci\u00f3n <code>@SerialName<\/code>, que le permite <em>renombrar campos<\/em> tanto para codificar como para decodificar, pero no le permite <em>especificar alternativas<\/em>.<\/p>\n<p>Esperamos que esta funcionalidad le facilite el trabajo con servicios que devuelven campos con nombres distintos que representan los mismos valores, sobreviven a migraciones de esquema y ofrecen estupendas actualizaciones para sus aplicaciones.<\/p>\n<p><a name=\"api-docs\"><\/a><\/p>\n<h2>Nueva documentaci\u00f3n API<\/h2>\n<p>Para que su experiencia con el aprendizaje <code>kotlinx.serialization<\/code> sea lo m\u00e1s c\u00f3moda y divertida posible, tratamos de ofrecerle gran cantidad de materiales de referencia. Uno de ellos es la <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/blob\/master\/docs\/serialization-guide.md\" target=\"_blank\" rel=\"noopener\">Kotlin Serialization Guide en GitHub<\/a>, que ofrece una visi\u00f3n general de las funcionalidades que aporta la biblioteca e incluye ejemplos autocontenidos para que comprenda de forma intuitiva cada funcionalidad.<\/p>\n<p>Otro es la <a href=\"https:\/\/kotlin.github.io\/kotlinx.serialization\/\" target=\"_blank\" rel=\"noopener\">documentaci\u00f3n API de kotlinx.serialization<\/a>, que hemos renovado por completo. Bas\u00e1ndose en una nueva versi\u00f3n de <a href=\"https:\/\/github.com\/Kotlin\/dokka\" target=\"_blank\" rel=\"noopener\">Dokka<\/a>, el motor de documentaci\u00f3n de Kotlin, la nueva documentaci\u00f3n de la API incluye un nuevo dise\u00f1o moderno y receptivo, as\u00ed como s\u00edmbolos por los que resulta sencillo navegar.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/04\/image1.png\" alt=\"Ejemplo de los nuevos documentos de la API, que muestran la documentaci\u00f3n de JsonElement\" \/><\/p>\n<p align=\"center\"><a class=\"jb-download-button\" title=\"Instalar\" href=\"https:\/\/kotlin.github.io\/kotlinx.serialization\/\" target=\"_blank\" rel=\"noopener\">\u00a1Explore la nueva documentaci\u00f3n API de kotlinx.serialization!<\/a><\/p>\n<p><a name=\"protobuf-schemas\"><\/a><\/p>\n<h2>Protobuf: generaci\u00f3n de esquemas experimental desde clases Kotlin<\/h2>\n<p><a href=\"https:\/\/developers.google.com\/protocol-buffers\" target=\"_blank\" rel=\"noopener\">Protocol Buffers<\/a> (Protobuf) es un <em>formato de serializaci\u00f3n binario<\/em> para datos estructurados creado por Google. Como formato binario, es m\u00e1s eficiente en cuanto a espacio que JSON o XML, y a\u00fan as\u00ed ofrece una <em>estructura independiente del lenguaje<\/em> que puede utilizar para la comunicaci\u00f3n entre aplicaciones.<\/p>\n<p>Con <code>kotlinx.serialization<\/code>, puede utilizar <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/blob\/master\/docs\/formats.md#protobuf-experimental\" target=\"_blank\" rel=\"noopener\">serializaci\u00f3n Protobuf multiplataforma<\/a> (usando <a href=\"https:\/\/developers.google.com\/protocol-buffers\/docs\/proto\" target=\"_blank\" rel=\"noopener\">sem\u00e1ntica proto2<\/a>) con estabilidad <em>experimental<\/em>. Como en los dem\u00e1s formatos, anote su clase como <code>@Serializable<\/code> y utilice los m\u00e9todos incorporados <code>encode<\/code> \/ <code>decode<\/code>:<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">@Serializable\ndata class Project(val name: String, val language: String)\n\nfun main() {\nval data = Project(\"kotlinx.serialization\", \"Kotlin\")\nval bytes = ProtoBuf.encodeToByteArray(data)\nprintln(bytes.toAsciiHexString())\nval obj = ProtoBuf.decodeFromByteArray(bytes)\nprintln(obj)\n}\n<\/pre>\n<p>Con sus clases de Kotlin como <em>fuente de referencia<\/em> (junto con cualquier <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/blob\/master\/docs\/formats.md#protobuf-experimental\" target=\"_blank\" rel=\"noopener\">personalizaci\u00f3n<\/a> que desee aplicar), <code>kotlinx.serialization<\/code> es capaz de inferir el esquema binario de los datos, haciendo que la comunicaci\u00f3n Protobuf <em>entre m\u00faltiples aplicaciones Kotlin<\/em> resulte concisa y pr\u00e1ctica.<\/p>\n<p><code>kotlinx.serialization<\/code> 1.2 ahora incluye un <em>generador de esquemas para Protocol Buffers<\/em> experimental. Le permite generar archivos <code>.proto<\/code> desde sus clases de datos Kotlin, lo que a su vez puede utilizarse para generar representaciones de su esquema de comunicaci\u00f3n en otros lenguajes, incluidos Python, C++ y TypeScript.<\/p>\n<p>Para obtener instrucciones sobre c\u00f3mo comenzar con el nuevo generador de esquemas, compruebe las instrucciones correspondientes en la <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/blob\/master\/docs\/formats.md#protobuf-experimental\" target=\"_blank\" rel=\"noopener\">documentaci\u00f3n<\/a>.<\/p>\n<p>Cuando se haya generado el archivo <code>.proto<\/code>, puede almacenarlo en su repositorio y utilizarlo para generar representaciones de sus clases Kotlin en otros lenguajes. Esperamos que esto le facilite el uso de la integraci\u00f3n Protobuf de <code>kotlinx.serialization<\/code> en <em>aplicaciones multilenguaje<\/em> sin tener que renunciar a la comodidad de gestionar sus esquemas directamente en el c\u00f3digo fuente Kotlin.<\/p>\n<p>Como esta es la <em>primera iteraci\u00f3n<\/em> del generador de esquemas Protobuf, confiamos en gran medida en su feedback. Por favor, pru\u00e9belo y cu\u00e9ntenos sus casos de uso, c\u00f3mo gestiona sus modelos y archivos <code>.proto<\/code>, cualquier problema que se encuentre y las funcionalidades que le gustar\u00eda que incorpor\u00e1semos, utilizando el <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/issues\" target=\"_blank\" rel=\"noopener\">sistema de seguimiento de incidencias de GitHub<\/a>.<\/p>\n<p>Al trabajar con el generador de esquemas, por favor, no olvide sus limitaciones. Como norma general, si una clase de Kotlin se puede serializar con la implementaci\u00f3n Protobuf incluida con <code>kotlinx.serialization<\/code>, el generador de esquemas ofrecer\u00e1 compatibilidad con ella. Esto tambi\u00e9n significa que son aplicables <a href=\"https:\/\/kotlin.github.io\/kotlinx.serialization\/kotlinx-serialization-protobuf\/kotlinx-serialization-protobuf\/kotlinx.serialization.protobuf\/-proto-buf\/index.html\" target=\"_blank\" rel=\"noopener\">las mismas restricciones<\/a>. Estos son algunos puntos que debe tener en cuenta:<\/p>\n<ul>\n<li>Las <em>clases y nombres de propiedades<\/em> de Kotlin deben adaptarse a la <a href=\"https:\/\/developers.google.com\/protocol-buffers\/docs\/reference\/proto2-spec\" target=\"_blank\" rel=\"noopener\">especificaci\u00f3n de Protobuf<\/a>, y no contienen caracteres ilegales.<\/li>\n<li>La <em>nulidad<\/em> de Kotlin no se refleja en el esquema (porque proto2 no dispone de sem\u00e1ntica para ello). Los <em>campos opcionales<\/em> que ofrecen los buffers de protocolo se utilizan bas\u00e1ndose en si sus propiedades de Kotlin definen <em>valores predeterminados<\/em>.<\/li>\n<li>Los <em>valores predeterminados<\/em> de Kotlin no se incluyen en el esquema (lo que significa que tendr\u00e1 que garantizar por su cuenta la coherencia de los valores predeterminados en diferentes implementaciones de lenguaje.)<\/li>\n<\/ul>\n<p><a name=\"start-using\"><\/a><\/p>\n<h2>\u00a1Comience a utilizar kotlinx.serialization 1.2!<\/h2>\n<p>\u00a1Con esto acaba nuestro resumen! Si est\u00e1 listo para <em>disfrutar de una codificaci\u00f3n y decodificaci\u00f3n m\u00e1s r\u00e1pida en JSON, compatibilidad con incorporaciones al sistema de tipo Kotlin 1.5, generaci\u00f3n de esquemas Protobuf y m\u00e1s<\/em>, \u00a1es el momento de actualizar!<\/p>\n<p>Si ya est\u00e1 utilizando <code>kotlinx.serialization<\/code>, actualizar a la versi\u00f3n 1.2 es muy r\u00e1pido (y si no ha probado <code>kotlinx.serialization<\/code> \u00a1es un buen momento para comenzar!). En primer lugar, actualice el bloque <code>plugins<\/code> en su archivo <code>build.gradle.kts<\/code>:<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">plugins {\nkotlin(\"jvm\") version \"1.5.0\" \/\/ or kotlin(\"multiplatform\") or any other kotlin plugin\nkotlin(\"plugin.serialization\") version \"1.5.0\"\n}\n<\/pre>\n<p>A continuaci\u00f3n, actualice su bloque <code>dependencies<\/code> con la biblioteca runtime, incluyendo los formatos que desea utilizar en su aplicaci\u00f3n:<\/p>\n<pre class=\"kotlin-code\" style=\"visibility: hidden; padding: 36px 0;\" data-highlight-only=\"true\">dependencies {\nimplementation(\"org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.1\")\nimplementation(\"org.jetbrains.kotlinx:kotlinx-serialization-protobuf:1.2.1\")\n\/\/ . . .\n}\n<\/pre>\n<h2>Ver y leer m\u00e1s<\/h2>\n<ul>\n<li><a href=\"https:\/\/youtu.be\/698I_AH8h6s\" target=\"_blank\" rel=\"noopener\">V\u00eddeo de kotlinx.serialization 1.2<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/\" target=\"_blank\" rel=\"noopener\">Biblioteca en GitHub<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/blob\/master\/docs\/serialization-guide.md\" target=\"_blank\" rel=\"noopener\">Gu\u00eda de kotlinx.serialization<\/a><\/li>\n<li><a href=\"https:\/\/kotlin.github.io\/kotlinx.serialization\/\" target=\"_blank\" rel=\"noopener\">Documentaci\u00f3n API<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2021\/05\/kotlin-1-5-0-released\/\">Art\u00edculo del blog del lanzamiento de Kotlin 1.5.0<\/a><\/li>\n<\/ul>\n<h3>Si tiene alg\u00fan problema<\/h3>\n<ul>\n<li>Informe acerca de incidencias en nuestro <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.serialization\/issues\" target=\"_blank\" rel=\"noopener\">sistema de seguimiento de incidencias de GitHub<\/a>.<\/li>\n<li>Busque ayuda en el canal #serialization de Kotlin Slack (<a href=\"https:\/\/surveys.jetbrains.com\/s3\/kotlin-slack-sign-up\" target=\"_blank\" rel=\"noopener\">obtenga una invitaci\u00f3n<\/a>).<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.youtube.com\/channel\/UCP7uiEZIqci43m22KDl0sNw?sub_confirmation=1\" target=\"_blank\" rel=\"noopener\">\u00a1Suscr\u00edbase al canal de YouTube de Kotlin!<\/a> \u00a1Que disfrute de la (de)serializaci\u00f3n!<\/p>\n","protected":false},"author":1086,"featured_media":137333,"comment_status":"closed","ping_status":"closed","template":"","categories":[909],"tags":[671],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/143628"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/comments?post=143628"}],"version-history":[{"count":6,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/143628\/revisions"}],"predecessor-version":[{"id":143635,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/kotlin\/143628\/revisions\/143635"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media\/137333"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/media?parent=143628"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/categories?post=143628"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/tags?post=143628"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/es\/wp-json\/wp\/v2\/cross-post-tag?post=143628"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}