{"id":2500,"date":"2022-03-23T20:12:34","date_gmt":"2022-03-23T20:12:34","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2500"},"modified":"2022-03-23T20:12:34","modified_gmt":"2022-03-23T20:12:34","slug":"haftalik-c-47-c-serialization-deserialization","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/","title":{"rendered":"Haftal\u0131k C++ 47 &#8211; C++ Serialization\/Deserialization"},"content":{"rendered":"<p>Merhaba sevgili yaz\u0131l\u0131mperver dostlar\u0131m bir ba\u015fka haftal\u0131k C++ yaz\u0131m ile birlikteyiz. Bu yaz\u0131mda, eminim bir \u00e7o\u011funuzun ihtiyac\u0131n\u0131 hissetti\u011fi C++\u00a0 &#8220;serialization\/deserialization&#8221; ihtiyac\u0131na yard\u0131mc\u0131 olabilecek alternatiflerden birine de\u011finece\u011fim: <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/uscilab.github.io\/cereal\/\">Cereal K\u00fct\u00fcphanesi<\/a>.<\/strong><\/span> Di\u011fer alternatifler i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/thekvs\/cpp-serializers\">https:\/\/github.com\/thekvs\/cpp-serializers<\/a><\/strong><\/span> sayfas\u0131na bakabilirsiniz.<\/p>\n<p>A\u00e7\u0131k\u00e7as\u0131, uzun bir\u00a0 s\u00fcre \u00f6nce boost k\u00fct\u00fcphanelerinin sundu\u011fu &#8220;serialization&#8221; kabiliyetlerini kullanm\u0131\u015ft\u0131m. Daha sonralar\u0131 ise, json ve xml k\u00fct\u00fcphanelerini kullanarak, bu tarz ihtiya\u00e7lar\u0131m\u0131 kendim, basit s\u0131n\u0131flar yazarak giderdim.<\/p>\n<p>Ki\u015fisel bir ihtiya\u00e7 i\u00e7in neler var diye bakt\u0131\u011f\u0131mda Cereal k\u00fct\u00fcphanesine denk geldim. \u00d6ncelikle ihtiya\u00e7lar\u0131 netle\u015ftirme ad\u0131na burada s\u0131ralayal\u0131m:<\/p>\n<ul>\n<li>Basit bir \u015fekilde veri yap\u0131lar\u0131n\u0131n i\u00e7eriklerini .json (ve ileride .xml, belki binary) dosyas\u0131 olarak kaydetmek (gerek konfig\u00fcrasyon gerekse veri),<\/li>\n<li>Benzer \u015fekilde bu tarz dosyalar\u0131 okumak.<\/li>\n<\/ul>\n<p>\u015eu an i\u00e7in a\u011f \u00fczerinden payla\u015f\u0131m i\u00e7in bu tarz bir ihtiyac\u0131m olmad\u0131\u011f\u0131 i\u00e7in \u00e7ok fazla bir k\u0131s\u0131t\u0131m yok. Bu tarz ihtiyac\u0131 olan arkada\u015flar Google&#8217;\u0131n ProtoBuf&#8217;\u0131na g\u00f6z atabilirler. \u00d6zellikle, kapsaml\u0131 veri payla\u015f\u0131mlar\u0131 i\u00e7in bu alternatif bana da daha \u00e7ekici geliyor. Buna da bir yaz\u0131mda de\u011finece\u011fim.<\/p>\n<p>Gelelim kullan\u0131ma. \u00d6ncelikle C++ 11 destekli bir derleyiciye ihtiyac\u0131n\u0131z bulunmakta. \u00d6ncelikle <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/github.com\/USCiLab\/cereal\">https:\/\/github.com\/USCiLab\/cereal<\/a><\/span><\/strong> adresinden k\u00fct\u00fcphaneyi indirmeniz gerekmekte. K\u00fct\u00fcphane ba\u015fl\u0131k dosyalar\u0131ndan olu\u015fmakta, bu sebeple ilgili ba\u015fl\u0131k dosyalar\u0131n\u0131, kaynak kod i\u00e7erisinden eklemeniz yeterli (cereal-1.3.2\\include dizininde bulunuyor, benim indirdi\u011fim s\u00fcr\u00fcm i\u00e7in).<\/p>\n<p>\u015eimdi gelelim \u00f6rnek olarak saklamak istedi\u011fimiz veri yap\u0131s\u0131na bir g\u00f6z atal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true \">struct WindowParameter {\r\n        std::string Title{\"Default Window\"};\r\n        uint32_t Width{640};\r\n        uint32_t Height{480};\r\n        uint32_t Top{0};\r\n        uint32_t Left{0};\r\n        Color ClearColor{180, 50, 79};\r\n        bool IsFullScreen{false};\r\n        bool IsVSYNCEnabled{ false };\r\n};<\/pre>\n<p>san\u0131r\u0131m isminden ne saklad\u0131\u011f\u0131n\u0131 az \u00e7ok anlam\u0131\u015fs\u0131n\u0131zd\u0131r. Ayr\u0131ca bu veri yap\u0131s\u0131 i\u00e7erisinde, bir de renk s\u0131n\u0131f\u0131m\u0131z var o da yakla\u015f\u0131k a\u015fa\u011f\u0131daki gibi bir s\u0131n\u0131f:<\/p>\n<pre class=\"lang:c++ decode:true \">class Color {\r\n...\r\n        uint8_t R;\r\n        uint8_t G;\r\n        uint8_t B;\r\n        uint8_t A;\r\n};<\/pre>\n<p>\u015eimdi bunu json format\u0131nda yazmak ve okumak i\u00e7in ne yapaca\u011f\u0131z ona bakaca\u011f\u0131z. \u00d6ncelikli olarak, hedef veri format\u0131na g\u00f6re a\u015fa\u011f\u0131daki ba\u015fl\u0131k dosyalar\u0131n\u0131 eklemeniz gerekiyor:<\/p>\n<ul>\n<li><code class=\"language-plaintext highlighter-rouge\">#include &lt;cereal\/archives\/binary.hpp&gt;<\/code><\/li>\n<li><code class=\"language-plaintext highlighter-rouge\">#include &lt;cereal\/archives\/portable_binary.hpp&gt;<\/code><\/li>\n<li><code class=\"language-plaintext highlighter-rouge\">#include &lt;cereal\/archives\/xml.hpp&gt;<\/code><\/li>\n<li><code class=\"language-plaintext highlighter-rouge\">#include &lt;cereal\/archives\/json.hpp&gt;<\/code><\/li>\n<\/ul>\n<p>Daha sonra, serialization\/deserialization fonksiyonlar\u0131n\u0131 nas\u0131l ve nerede yazaca\u011f\u0131n\u0131z geliyor. Cereal, bunun i\u00e7in bir ka\u00e7 y\u00f6ntem sunmakta. Detaylar\u0131na <a href=\"https:\/\/uscilab.github.io\/cereal\/serialization_functions.html\"><span style=\"color: #008000;\"><strong>https:\/\/uscilab.github.io\/cereal\/serialization_functions.html<\/strong><\/span><\/a> sayfas\u0131nda ula\u015faca\u011f\u0131n\u0131z y\u00f6ntemler temelde a\u015fa\u011f\u0131daki yakla\u015f\u0131mlara dayanmakta:<\/p>\n<ol>\n<li>S\u0131n\u0131fa tek bir metot ekleyerek her iki i\u015fi (&#8220;serialization\/deserialization&#8221;) yapmak,<\/li>\n<li>S\u0131n\u0131fa her iki i\u015flem i\u00e7in ayr\u0131 ayr\u0131 metotlar eklemek,<\/li>\n<li>S\u0131n\u0131f d\u0131\u015f\u0131nda tek bir metot eklemek,<\/li>\n<li>S\u0131n\u0131fa d\u0131\u015f\u0131nda iki i\u015flem i\u00e7in ayr\u0131 ayr\u0131 metotlar eklemek,<\/li>\n<\/ol>\n<p>Ben burada, 3. yakla\u015f\u0131m\u0131 tercih ettim, orjinal s\u0131n\u0131f i\u00e7erisine\u00a0 m\u00fcdahale etmeden, en k\u0131sa \u015fekilde \u00e7\u00f6zmek i\u00e7in. Fakat, &#8220;serialization\/deserialization&#8221; i\u015flevini ayro bir s\u0131n\u0131f i\u00e7erisine ekledim. \u00d6ncelikle, Color s\u0131n\u0131f\u0131 i\u00e7in nas\u0131l bir kod par\u00e7as\u0131na ihtiyac\u0131m\u0131z var ona bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true \">#include &lt;cereal\/archives\/json.hpp&gt;\r\n\r\ntemplate&lt;class Archive&gt;\r\nvoid serialize(Archive&amp; archive, Color&amp; m) {\r\n           archive(cereal::make_nvp(\"Red\", m.R),\r\n                   cereal::make_nvp(\"Green\", m.G),\r\n                   cereal::make_nvp(\"Blue\", m.B),\r\n                   cereal::make_nvp(\"Alpha\", m.A));\r\n}<\/pre>\n<p><em>cereal::make_nvp( name, value )<\/em> ibaresi zorunlu de\u011fil fakat bunu eklerseniz, Json i\u00e7erisindeki isimlendirmeleri kontrol edebilirsiniz. Yoksa varsay\u0131lan, fakat pek kullan\u0131c\u0131 dostu olmayan bir isimlendirme ile kar\u015f\u0131la\u015fabilirsiniz (birazdan \u00f6rnek verece\u011fim).<\/p>\n<p>\u015eimdi bir de, WindowParameter s\u0131n\u0131f\u0131 i\u00e7in haz\u0131rlayaca\u011f\u0131m\u0131z koda bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true \">#include &lt;cereal\/archives\/json.hpp&gt;\r\n\r\ntemplate&lt;class Archive&gt;\r\nvoid serialize(Archive&amp; archive, WindowParameter&amp; m) {\r\n         archive(cereal::make_nvp(\"Title\", m.Title),\r\n                 cereal::make_nvp(\"Width\", m.Width),\r\n                 cereal::make_nvp(\"Height\", m.Height),\r\n                 cereal::make_nvp(\"Top\", m.Top),\r\n                 cereal::make_nvp(\"Left\", m.Left),\r\n                 cereal::make_nvp(\"ClearColor\", m.ClearColor),\r\n                 cereal::make_nvp(\"IsFullScreen\", m.IsFullScreen),\r\n                 cereal::make_nvp(\"IsVsyncEnabled\", m.IsVSYNCEnabled));\r\n}<\/pre>\n<p>Yukar\u0131daki sat\u0131rlar d\u0131\u015f\u0131nda, &#8220;serialization\/deserialization&#8221; i\u00e7in bir sat\u0131r kod yazman\u0131za gerek yok. Temel veri tipleri i\u00e7in ilave bir kod par\u00e7as\u0131 eklemenize ihtiya\u00e7 yok, di\u011ferleri i\u00e7in, benzer \u015fekilde serialize fonksiyonunu tan\u0131mlaman\u0131z gerekmekte.<\/p>\n<p>Son olarak gelelim as\u0131l s\u0131n\u0131fa:<\/p>\n<pre class=\"lang:c++ decode:true\">template &lt;class T&gt;\r\nclass JsonDataSerializer{\r\npublic:\r\n\tstd::optional&lt;T&gt; Deserialize(std::string_view fileName) {\r\n\t\tstd::ifstream is(fileName.data());\r\n\r\n\t\tif (is.is_open()) {\r\n\t\t\ttry {\r\n\t\t\t\tT parsedData;\r\n\t\t\t\tcereal::JSONInputArchive archive_in(is);\r\n\t\t\t\tarchive_in(parsedData);\r\n\r\n\t\t\t\treturn parsedData;\r\n\t\t\t}\r\n\t\t\tcatch (cereal::RapidJSONException&amp;) {\r\n\t\t\t\treturn std::nullopt;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn std::nullopt;\r\n\t\t}\r\n\t}\r\n\r\n\tbool Serialize(std::string_view fileName, const T&amp; data, std::string_view jsonObjName = \"Object\") {\r\n\t\ttry {\r\n\t\t\tstd::ofstream os(fileName.data());\r\n\r\n\t\t\tcereal::JSONOutputArchive archive_out(os);\r\n\t\t\tarchive_out(cereal::make_nvp(jsonObjName.data(), data));\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tcatch (cereal::RapidJSONException&amp;) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};<\/pre>\n<p>Bu s\u0131n\u0131f ile &#8220;serialization\/deserialization&#8221; i\u015flevi kontrol edebilirsiniz. Ayr\u0131ca, .xml vs de benzer bir s\u0131n\u0131f ile kotar\u0131labilir. Son olarak kullan\u0131ma bir bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true \">WindowParameter param, param2; \r\n\r\nJsonDataParser&lt;WindowParameter&gt; wpParser;\r\nstd::cout &lt;&lt; \"Serialize op result: \" &lt;&lt; wpParser.Serialize(\"data.json\", param) &lt;&lt; \"\\n\";\r\n\r\nauto opResult = wpParser.Deserialize(\"data.json\");\r\nstd::cout &lt;&lt; \"Deserialize op result: \" &lt;&lt; opResult.has_value() &lt;&lt; \"\\n\";<\/pre>\n<p>Pastan\u0131n, kiraz\u0131n\u0131 sona b\u0131rakt\u0131k \ud83d\ude42 Olu\u015fan json dosyas\u0131 nas\u0131l oluyor ona bakal\u0131m:<\/p>\n<pre class=\"lang:js decode:true\">{\r\n    \"Object\": {\r\n        \"Title\": \"Default Window\",\r\n        \"Width\": 640,\r\n        \"Height\": 480,\r\n        \"Top\": 0,\r\n        \"Left\": 0,\r\n        \"ClearColor\": {\r\n            \"Red\": 180,\r\n            \"Green\": 50,\r\n            \"Blue\": 79,\r\n            \"Alpha\": 255\r\n        },\r\n        \"IsFullScreen\": false,\r\n        \"IsVsyncEnabled\": false\r\n    }\r\n}<\/pre>\n<p>Yukar\u0131da belirtti\u011fim <em>cereal::make_nvp&#8217;<\/em>yi kullanmazsan\u0131z, a\u015fa\u011f\u0131daki gibi bir \u00e7\u0131kt\u0131 elde edersiniz:<\/p>\n<pre class=\"lang:js decode:true\">{\r\n    \"Object\": {\r\n        \"value0\": \"Default Window\",\r\n        \"value1\": 640,\r\n        \"value2\": 480,\r\n        \"value3\": 0,\r\n        \"value4\": 0,\r\n        \"value5\": {\r\n            \"value0\": 180,\r\n            \"value1\": 50,\r\n            \"value2\": 79,\r\n            \"value3\": 255\r\n        },\r\n        \"value6\": false,\r\n        \"value7\": false\r\n    }\r\n}<\/pre>\n<p>Yukar\u0131da bahsetti\u011fim hususlar yan\u0131nda, tiplere s\u00fcr\u00fcm ekleme, t\u00fcretilen s\u0131n\u0131flar i\u00e7in de kabiliyetler mevcut, bunlar i\u00e7in de k\u00fct\u00fcphanenin sayfas\u0131na g\u00f6z atabilirsiniz.<\/p>\n<p>Bir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek dile\u011fiyle, bol kodlu g\u00fcnler diliyorum.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Kaynaklar<\/span><\/strong><\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/USCiLab\/cereal\"><span style=\"color: #008000;\"><strong>https:\/\/github.com\/USCiLab\/cereal<\/strong><\/span><\/a><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/thekvs\/cpp-serializers\">https:\/\/github.com\/thekvs\/cpp-serializers<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/isocpp.org\/wiki\/faq\/serialization\">https:\/\/isocpp.org\/wiki\/faq\/serialization<\/a><\/strong><\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba sevgili yaz\u0131l\u0131mperver dostlar\u0131m bir ba\u015fka haftal\u0131k C++ yaz\u0131m ile birlikteyiz. Bu yaz\u0131mda, eminim bir \u00e7o\u011funuzun ihtiyac\u0131n\u0131 hissetti\u011fi C++\u00a0 &#8220;serialization\/deserialization&#8221; ihtiyac\u0131na yard\u0131mc\u0131 olabilecek alternatiflerden birine de\u011finece\u011fim: Cereal K\u00fct\u00fcphanesi. Di\u011fer alternatifler i\u00e7in https:\/\/github.com\/thekvs\/cpp-serializers sayfas\u0131na bakabilirsiniz. A\u00e7\u0131k\u00e7as\u0131, uzun bir\u00a0 s\u00fcre \u00f6nce boost k\u00fct\u00fcphanelerinin sundu\u011fu &#8220;serialization&#8221; kabiliyetlerini kullanm\u0131\u015ft\u0131m. Daha sonralar\u0131 ise, json ve xml k\u00fct\u00fcphanelerini kullanarak, bu tarz&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[27,10,41],"tags":[43,46,979,981,458,980],"class_list":["post-2500","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arac","category-c","category-modern-c","tag-auto","tag-c-11","tag-cereal","tag-deserialization","tag-optional","tag-serialization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Haftal\u0131k C++ 47 - C++ Serialization\/Deserialization - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/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:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Haftal\u0131k C++ 47 - C++ Serialization\/Deserialization - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Merhaba sevgili yaz\u0131l\u0131mperver dostlar\u0131m bir ba\u015fka haftal\u0131k C++ yaz\u0131m ile birlikteyiz. Bu yaz\u0131mda, eminim bir \u00e7o\u011funuzun ihtiyac\u0131n\u0131 hissetti\u011fi C++\u00a0 &#8220;serialization\/deserialization&#8221; ihtiyac\u0131na yard\u0131mc\u0131 olabilecek alternatiflerden birine de\u011finece\u011fim: Cereal K\u00fct\u00fcphanesi. Di\u011fer alternatifler i\u00e7in https:\/\/github.com\/thekvs\/cpp-serializers sayfas\u0131na bakabilirsiniz. A\u00e7\u0131k\u00e7as\u0131, uzun bir\u00a0 s\u00fcre \u00f6nce boost k\u00fct\u00fcphanelerinin sundu\u011fu &#8220;serialization&#8221; kabiliyetlerini kullanm\u0131\u015ft\u0131m. Daha sonralar\u0131 ise, json ve xml k\u00fct\u00fcphanelerini kullanarak, bu tarz... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-23T20:12:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png\" \/>\n\t<meta property=\"og:image:width\" content=\"32\" \/>\n\t<meta property=\"og:image:height\" content=\"32\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"Haftal\u0131k C++ 47 &#8211; C++ Serialization\/Deserialization\",\"datePublished\":\"2022-03-23T20:12:34+00:00\",\"dateModified\":\"2022-03-23T20:12:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/\"},\"wordCount\":767,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"auto\",\"C++ 11\",\"cereal\",\"deserialization\",\"optional\",\"serialization\"],\"articleSection\":[\"Ara\u00e7\",\"C++\",\"Modern C++\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/\",\"name\":\"Haftal\u0131k C++ 47 - C++ Serialization\/Deserialization - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2022-03-23T20:12:34+00:00\",\"dateModified\":\"2022-03-23T20:12:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Haftal\u0131k C++ 47 &#8211; C++ Serialization\/Deserialization\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Haftal\u0131k C++ 47 - C++ Serialization\/Deserialization - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","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.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/","og_locale":"tr_TR","og_type":"article","og_title":"Haftal\u0131k C++ 47 - C++ Serialization\/Deserialization - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Merhaba sevgili yaz\u0131l\u0131mperver dostlar\u0131m bir ba\u015fka haftal\u0131k C++ yaz\u0131m ile birlikteyiz. Bu yaz\u0131mda, eminim bir \u00e7o\u011funuzun ihtiyac\u0131n\u0131 hissetti\u011fi C++\u00a0 &#8220;serialization\/deserialization&#8221; ihtiyac\u0131na yard\u0131mc\u0131 olabilecek alternatiflerden birine de\u011finece\u011fim: Cereal K\u00fct\u00fcphanesi. Di\u011fer alternatifler i\u00e7in https:\/\/github.com\/thekvs\/cpp-serializers sayfas\u0131na bakabilirsiniz. A\u00e7\u0131k\u00e7as\u0131, uzun bir\u00a0 s\u00fcre \u00f6nce boost k\u00fct\u00fcphanelerinin sundu\u011fu &#8220;serialization&#8221; kabiliyetlerini kullanm\u0131\u015ft\u0131m. Daha sonralar\u0131 ise, json ve xml k\u00fct\u00fcphanelerini kullanarak, bu tarz... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2022-03-23T20:12:34+00:00","og_image":[{"width":32,"height":32,"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png","type":"image\/png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"6 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"Haftal\u0131k C++ 47 &#8211; C++ Serialization\/Deserialization","datePublished":"2022-03-23T20:12:34+00:00","dateModified":"2022-03-23T20:12:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/"},"wordCount":767,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["auto","C++ 11","cereal","deserialization","optional","serialization"],"articleSection":["Ara\u00e7","C++","Modern C++"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/","name":"Haftal\u0131k C++ 47 - C++ Serialization\/Deserialization - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2022-03-23T20:12:34+00:00","dateModified":"2022-03-23T20:12:34+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2022\/03\/23\/haftalik-c-47-c-serialization-deserialization\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Haftal\u0131k C++ 47 &#8211; C++ Serialization\/Deserialization"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2500","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=2500"}],"version-history":[{"count":7,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2500\/revisions"}],"predecessor-version":[{"id":2508,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2500\/revisions\/2508"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/174"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}