{"id":159568,"date":"2025-03-27T11:08:59","date_gmt":"2025-03-27T11:08:59","guid":{"rendered":"https:\/\/peraltafinancing.com\/apple-2\/michael-tsai-blog-the-future-of-swift-serialization-and-deserialization-apis\/"},"modified":"2025-03-27T11:08:59","modified_gmt":"2025-03-27T11:08:59","slug":"michael-tsai-blog-the-future-of-swift-serialization-and-deserialization-apis","status":"publish","type":"post","link":"https:\/\/fivemor.com\/?p=159568","title":{"rendered":"Michael Tsai &#8211; Blog &#8211; The Future of Swift Serialization and Deserialization APIs"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p><a href=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\">Kevin Perry<\/a>:<\/p>\n<blockquote cite=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\">\n<p>It\u2019s clear from community adoption and feedback that <code>Codable<\/code> has had a lot of success in the years since it was added to Swift 4, but that it doesn\u2019t satisfy some important needs. One of the foremost of those needs is performance more in line with programming environments that compete with Swift. As such, the main goal for this effort is to unlock higher levels of performance during both serialization and deserialization without sacrificing the ease of use that <code>Codable<\/code> provides.<\/p>\n<p>[\u2026]<\/p>\n<p>Even with all of its strengths, the existing API\u2019s design has some unavoidable performance penalties. For instance, its use of existentials implies additional runtime and memory costs as existential values are boxed, unboxed, retained, released, and dynamic dispatch is performed.<\/p>\n<p>Also, because a client can decode dictionary values in arbitrary orders, a <code>KeyedDecodingContainer<\/code> is effectively required to proactively parse the payload into some kind of intermediate representation, necessitating allocations for internal temporary dictionaries, and <code>String<\/code> values.<\/p>\n<p>[\u2026]<\/p>\n<p>In Swift, when a client needs to do more than just alter the default <code>CodingKey<\/code> representations, developers are often faced with a large cliff where they\u2019re forced to manually replicate the whole <code>Codable<\/code> implementation just to do so.<\/p>\n<p>[\u2026]<\/p>\n<p>In this new design I aim to leverage Swift\u2019s macro features to meet or exceed Serde\u2019s level of support for customization of synthesized conformances. Moving code synthesis from the compiler to a macro will enable us to use attribute-like macros as targeted customization mechanisms, which was not something we could easily accomplish with the compiler-based <code>Codable<\/code> synthesis.<\/p>\n<p>[\u2026]<\/p>\n<p>There is no <code>encode(_: Date)<\/code> function present in the <code>Encoder<\/code> interface, which means <code>PropertyListEncoder<\/code> has to <a href=\"https:\/\/github.com\/swiftlang\/swift-foundation\/blob\/be44158fd9cbfd4a39ae1d671ad912afd2207567\/Sources\/FoundationEssentials\/PropertyList\/XMLPlistEncodingFormat.swift#L478\">attempt to dynamically cast<\/a> every <code>some Encodable<\/code> type it receives to <code>Date<\/code> in order to handle these natively. This helps keep the <code>Encodable<\/code> type format-agnostic, but it has a negative impact on performance, even if you never actually encode any <code>Date<\/code>s.<\/p>\n<p>I believe that fully and formally embracing format-specialization where appropriate is the best solution to this problem. Specifically, we should encourage each serialization format that has native support for data types that aren\u2019t represented in the format-agnostic interface to produce its own protocol variant that includes explicit support for these types, e.g. <code>JSONCodable<\/code> or <code>PropertyListCodable<\/code>.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/10\">Dave DeLong<\/a> (<a href=\"https:\/\/mastodon.social\/@davedelong\/114181020726588694\">Mastodon<\/a>):<\/p>\n<blockquote cite=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/10\">\n<p>One of the big flaws of <code>Codable<\/code> is that it was built on the wrong abstraction. 99.9% of the time, developers who are interested in serializing a struct to data and back are doing so to a single, well-known format. However, the <code>Codable<\/code> API was built so that the abstraction point is the encoder itself, under the assumption that you would want to serialize a type to <em>multiple<\/em> formats. This is not the case.<\/p>\n<p>That design flaw has been the #1 source of Codable\u2019s woes. It makes properly implementing custom coders almost impossible; no one implements <code>superEncoder<\/code> properly, since most people don\u2019t deal with inheritance of reference types, and some formats are fundamentally incompatible with the Encoder\/Decoder APIs. (XML and CSV are two that spring to mind off the top of my head)<\/p>\n<p>[\u2026]<\/p>\n<p>IMO we should be encouraging packages that provide format-specific coders (<code>JSONCodable<\/code>, <code>PlistCodable<\/code>, <code>CSVCodable<\/code>, <code>XMLCodable<\/code>, etc) so that each encoder and decoder can provide format-specific functionality. Then we should provide a system level API to ask types to encode into an <em>opaque<\/em> format (ie \u201cplease turn yourself into a <code>Data<\/code> and back again\u201d).<\/p>\n<p>[\u2026]<\/p>\n<p>Foundation should provide an updated replacement for <code>NSCoding<\/code> and leave the type-specific encoders to type-specific packages to implement.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/33\">Kevin Perry<\/a>:<\/p>\n<blockquote cite=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/33\">\n<p><code>JSONCodable<\/code>, <code>PlistCodable<\/code>, etc. should have full freedom to craft their interface around each format\u2019s individuals needs and specialities.<\/p>\n<p>At one stage, the \u201cformat specialized\u201d protocols was the entirety of the design. However, while looking at adoption scenarios, I realized that this design presented a problem with \u201ccurrency\u201d types that are owned by frameworks\/libraries, but used by application-level serializable types.<\/p>\n<p>[\u2026]<\/p>\n<p>Hence the introduction of the format-agnostic protocols in parallel with the format-specialized ones. <code>Range<\/code> and <code>CGRect<\/code> can, in similar fashion to <code>Codable<\/code>, describe their serializable members abstractly, allowing a specific encoder\/decoder to interpret those instructions. The difference from <code>Codable<\/code> being that we avoid all the OTHER downsides of <code>Codable<\/code> the OP describes.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/37\">Dave DeLong<\/a>:<\/p>\n<blockquote cite=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/37\">\n<p>That\u2019s why I\u2019m suggesting that we split the API to support the cases separately. We have one API that can be very general and support the whole \u201cA type can be serialized to an opaque format\u201d use-case, and then packages to support particular formats and all of their respective idiosyncrasies. I think we\u2019d be repeating past mistakes to try and make those two use cases be the <em>same<\/em> API again.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/13\">Lincoln Wu<\/a>:<\/p>\n<blockquote cite=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/13\">\n<p>I think there\u2019s one common use case which is not covered by the current <code>Codable<\/code> design: heterogeneous\/dynamic decoding\/encoding.<\/p>\n<p>Many times in my developing, I wanted to decode part of a json into an intermediate representation, and later further decode that thing into a specific type.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/17\">Matt Gallagher<\/a>:<\/p>\n<blockquote cite=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/17\">\n<p>The problem with <code>Codable<\/code> \u2013 and what I think you\u2019re getting at when you suggest we need <code>JSONCodable<\/code>\/<code>PlistCodable<\/code> \u2013 is there\u2019s no sane custom implementation of <code>init(from:)<\/code> and <code>encode(to:)<\/code> without being archive-specific. These functions are generally a mashup of two different ideas:<\/p>\n<ol>\n<li>migration and versioning<\/li>\n<li>archive-specific choices like which fields to include and what order<\/li>\n<\/ol>\n<p>But moreover, while you might make archive-specific choices, you don\u2019t always have archive-specific knowledge.<\/p>\n<p>[\u2026]<\/p>\n<p>We have no lookahead. We can\u2019t peek to see if the next char is a double-quote, a digit or a bracket. Without overloading the <code>Decoder<\/code> to emit lookahead metadata as decodable types, you simply need to try each possibility, in turn, incurring the overhead and disruption of thrown errors.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\">Kevin Perry<\/a>:<\/p>\n<blockquote cite=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\">\n<p>This design does not include support for encoding and decoding cyclical objects graphs. Relatedly, there\u2019s still no intention to include encoding of runtime type information in serialization formats for any purpose\u2014all concrete types must be specified by the client doing the encoding or decoding.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/20\">Nick Lockwood<\/a>:<\/p>\n<blockquote cite=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/20\">\n<p>I was really disappointed to see this, because these are probably my two major pain points with <code>Codable<\/code>.<\/p>\n<p>If we are going to the trouble of making a brand new, backwards-incompatible replacement for <code>Codable<\/code> then it should try to correct all the major deficiencies of the existing design, not just performance.<\/p>\n<p><code>NSCoding<\/code> (for all its faults) supports both or heterogeneous data and cyclical references. If this new system doesn\u2019t support those then we are saying from the outset that it is still isn\u2019t going to be capable of dealing with a lot of real-world use-cases.<\/p>\n<p>[\u2026]<\/p>\n<p>Also (related) some kind of built-in support for schema updates and migrations (similar to CoreData\/SwiftData) would be a great feature, as this is another pain point in Codable.<\/p>\n<p>Even just a way to specify a default value for new non-optional properties would reduce a lot of the need for adding manual decoder implementations to apps in post-1.0 releases.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/mastodon.social\/@helge\/114185459437518079\">Helge He\u00df<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@helge\/114185459437518079\">\n<p><code>NSCoder<\/code>\/<code>NSArchiver<\/code> was actually pretty good for what it was intended for, archiving object graphs. How can I do that today? SwiftData? \ud83d\ude48<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/40\">Nick Lockwood<\/a>:<\/p>\n<blockquote cite=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/40\">\n<p>Another issue I\u2019ve run into with <code>Codable<\/code> is that a given object may have more than one serialized representation in a given application.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/46\">Zev Eisenberg<\/a>:<\/p>\n<blockquote cite=\"https:\/\/forums.swift.org\/t\/the-future-of-serialization-deserialization-apis\/78585\/46\"><p> I\u2019d like to put in a request to please consider <strong>error handling<\/strong>. A common source of grief for beginners is difficulty in reading the error messages thrown by Codable. Some information is missing, and it\u2019s formatted such that you really have to do some digging to understand it.<\/p><\/blockquote>\n<p><a href=\"https:\/\/mastodon.social\/@helge\/114185578351988532\">Helge He\u00df<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@helge\/114185578351988532\">\n<p>It seems the new macro based approach will solve some major performance problems \ud83d\udc4d But it doesn\u2019t seem to address what makes serialisation actually hard: different formats, mappings, versioning and preservation. It still seems to be bonusware, w\/ \u201cnow it does the demos fast\u201d, not something addressing actual serialisation issues.<br \/>\nThink Protobuf, that does.<\/p>\n<\/blockquote>\n<p>Previously:<\/p>\n<p class=\"tags\"><a rel=\"tag\" href=\"https:\/\/mjtsai.com\/blog\/tag\/cocoa\/\">Cocoa<\/a> <a rel=\"tag\" href=\"https:\/\/mjtsai.com\/blog\/tag\/json\/\">JSON<\/a> <a rel=\"tag\" href=\"https:\/\/mjtsai.com\/blog\/tag\/languagedesign\/\">Language Design<\/a> <a rel=\"tag\" href=\"https:\/\/mjtsai.com\/blog\/tag\/macros\/\">Macros<\/a> <a rel=\"tag\" href=\"https:\/\/mjtsai.com\/blog\/tag\/optimization\/\">Optimization<\/a> <a rel=\"tag\" href=\"https:\/\/mjtsai.com\/blog\/tag\/swift-codable\/\">Swift Codable<\/a> <a rel=\"tag\" href=\"https:\/\/mjtsai.com\/blog\/tag\/swift-programming-language\/\">Swift Programming Language<\/a><\/p>\n<h2><a id=\"respond\"><\/a><br \/>\n1 Comment<br \/>\n <\/h2>\n<hr class=\"com-hr\" \/>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Kevin Perry: It\u2019s clear from community adoption and feedback that Codable has had a lot of success in the years since it was added to Swift 4, but that it doesn\u2019t satisfy some important needs. One of the foremost of those needs is performance more in line with programming environments that compete with Swift. As [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11768],"tags":[13963,3767,65563,2481,1823,65562,11592,17088],"dealstore":[],"offerexpiration":[],"class_list":["post-159568","post","type-post","status-publish","format-standard","hentry","category-apple-2","tag-apis","tag-blog","tag-deserialization","tag-future","tag-michael","tag-serialization","tag-swift","tag-tsai"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Michael Tsai - Blog - The Future of Swift Serialization and Deserialization APIs - Som2ny Network<\/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:\/\/fivemor.com\/?p=159568\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Michael Tsai - Blog - The Future of Swift Serialization and Deserialization APIs - Som2ny Network\" \/>\n<meta property=\"og:description\" content=\"Kevin Perry: It\u2019s clear from community adoption and feedback that Codable has had a lot of success in the years since it was added to Swift 4, but that it doesn\u2019t satisfy some important needs. One of the foremost of those needs is performance more in line with programming environments that compete with Swift. As [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fivemor.com\/?p=159568\" \/>\n<meta property=\"og:site_name\" content=\"Som2ny Network\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-27T11:08:59+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fivemor.com\/?p=159568#article\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/?p=159568\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\"},\"headline\":\"Michael Tsai &#8211; Blog &#8211; The Future of Swift Serialization and Deserialization APIs\",\"datePublished\":\"2025-03-27T11:08:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=159568\"},\"wordCount\":1290,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"keywords\":[\"APIs\",\"Blog\",\"Deserialization\",\"Future\",\"Michael\",\"Serialization\",\"Swift\",\"Tsai\"],\"articleSection\":[\"Apple\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fivemor.com\/?p=159568#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fivemor.com\/?p=159568\",\"url\":\"https:\/\/fivemor.com\/?p=159568\",\"name\":\"Michael Tsai - Blog - The Future of Swift Serialization and Deserialization APIs - Som2ny Network\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/#website\"},\"datePublished\":\"2025-03-27T11:08:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fivemor.com\/?p=159568#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fivemor.com\/?p=159568\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fivemor.com\/?p=159568#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fivemor.com\/?bp_activities=1\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Michael Tsai &#8211; Blog &#8211; The Future of Swift Serialization and Deserialization APIs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fivemor.com\/#website\",\"url\":\"https:\/\/fivemor.com\/\",\"name\":\"Som2ny Network\",\"description\":\"Daily Deals\",\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fivemor.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fivemor.com\/#organization\",\"name\":\"Som2ny Network\",\"url\":\"https:\/\/fivemor.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"width\":300,\"height\":86,\"caption\":\"Som2ny Network\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/fivemor.com\"],\"url\":\"https:\/\/fivemor.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Michael Tsai - Blog - The Future of Swift Serialization and Deserialization APIs - Som2ny Network","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:\/\/fivemor.com\/?p=159568","og_locale":"en_US","og_type":"article","og_title":"Michael Tsai - Blog - The Future of Swift Serialization and Deserialization APIs - Som2ny Network","og_description":"Kevin Perry: It\u2019s clear from community adoption and feedback that Codable has had a lot of success in the years since it was added to Swift 4, but that it doesn\u2019t satisfy some important needs. One of the foremost of those needs is performance more in line with programming environments that compete with Swift. As [&hellip;]","og_url":"https:\/\/fivemor.com\/?p=159568","og_site_name":"Som2ny Network","article_published_time":"2025-03-27T11:08:59+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fivemor.com\/?p=159568#article","isPartOf":{"@id":"https:\/\/fivemor.com\/?p=159568"},"author":{"name":"admin","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371"},"headline":"Michael Tsai &#8211; Blog &#8211; The Future of Swift Serialization and Deserialization APIs","datePublished":"2025-03-27T11:08:59+00:00","mainEntityOfPage":{"@id":"https:\/\/fivemor.com\/?p=159568"},"wordCount":1290,"commentCount":0,"publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"keywords":["APIs","Blog","Deserialization","Future","Michael","Serialization","Swift","Tsai"],"articleSection":["Apple"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fivemor.com\/?p=159568#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fivemor.com\/?p=159568","url":"https:\/\/fivemor.com\/?p=159568","name":"Michael Tsai - Blog - The Future of Swift Serialization and Deserialization APIs - Som2ny Network","isPartOf":{"@id":"https:\/\/fivemor.com\/#website"},"datePublished":"2025-03-27T11:08:59+00:00","breadcrumb":{"@id":"https:\/\/fivemor.com\/?p=159568#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fivemor.com\/?p=159568"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fivemor.com\/?p=159568#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fivemor.com\/?bp_activities=1"},{"@type":"ListItem","position":2,"name":"Michael Tsai &#8211; Blog &#8211; The Future of Swift Serialization and Deserialization APIs"}]},{"@type":"WebSite","@id":"https:\/\/fivemor.com\/#website","url":"https:\/\/fivemor.com\/","name":"Som2ny Network","description":"Daily Deals","publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fivemor.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fivemor.com\/#organization","name":"Som2ny Network","url":"https:\/\/fivemor.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","width":300,"height":86,"caption":"Som2ny Network"},"image":{"@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","caption":"admin"},"sameAs":["https:\/\/fivemor.com"],"url":"https:\/\/fivemor.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/159568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=159568"}],"version-history":[{"count":0,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/159568\/revisions"}],"wp:attachment":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=159568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=159568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=159568"},{"taxonomy":"dealstore","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fdealstore&post=159568"},{"taxonomy":"offerexpiration","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fofferexpiration&post=159568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}