﻿
{"id":22956,"date":"2021-09-18T21:34:56","date_gmt":"2021-09-18T21:34:56","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=22956"},"modified":"2021-09-18T21:34:56","modified_gmt":"2021-09-18T21:34:56","slug":"net-coreda-messagepack-ile-binary-serialization","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/net-coreda-messagepack-ile-binary-serialization\/","title":{"rendered":".NET Core&#8217;da MessagePack \u0130le Binary Serialization"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde, programlama s\u00fcre\u00e7lerinde verilerimizi binary olarak kat be kat fazla performansla serile\u015ftirmemizi sa\u011flayacak olan MessagePack k\u00fct\u00fcphanesini .NET Core e\u015fli\u011finde inceliyor olaca\u011f\u0131z. \u0130\u00e7eri\u011fimiz boyunca MessagePack k\u00fct\u00fcphanesi nedir? hangi teknolojiler taraf\u0131ndan tercih edilmektedir? ne \u015fekilde kullan\u0131lmaktad\u0131r? vs. gibisinden sorular\u0131 cevapland\u0131rmaya \u00e7al\u0131\u015farak konuya dair tam teferruatl\u0131 bir inceleme ger\u00e7ekle\u015ftirmeye \u00e7al\u0131\u015f\u0131yor olaca\u011f\u0131z. O halde vakit kaybetmeksizin buyrun ba\u015flayal\u0131m&#8230;<\/p>\n<h3>MessagePack Nedir?<\/h3>\n<blockquote><p>It&#8217;s like JSON.<br \/>\nbut fast and small.<\/p>\n<div style=\"text-align:right;width:150px;font-size:11px;\"><a href=\"https:\/\/msgpack.org\/\" rel=\"noopener\" target=\"_blank\">msgpack.org<\/a><\/div>\n<\/blockquote>\n<p>MessagePack, olduk\u00e7a performansl\u0131 ve verimli bir binary serialization k\u00fct\u00fcphanesidir. Kullan\u0131m amac\u0131 veriyi transfer edilecek formata d\u00f6n\u00fc\u015ft\u00fcrmek ya da gelen veriyi kullan\u0131labilir forma uydurabilmektir. Haliyle JSON gibi birden \u00e7ok dil ve platform aras\u0131nda veri transferi ger\u00e7ekle\u015ftirmemizi sa\u011flamaktad\u0131r ve bu i\u015flemi son derece h\u0131zl\u0131 bir s\u0131k\u0131\u015ft\u0131rma algoritmas\u0131 olan LZ4 algoritmas\u0131n\u0131 kullanarak binary formatta sa\u011flayabildi\u011fi i\u00e7in JSON&#8217;a nazaran daha h\u0131zl\u0131 ve daha k\u00fc\u00e7\u00fck boyutlarda ger\u00e7ekle\u015ftirebilmektedir. Tabi bu durum MessagePack&#8217;in sadece binary formatta \u00e7al\u0131\u015ft\u0131\u011f\u0131 anlam\u0131na gelmemektedir. \u0130stek yahut ihtiya\u00e7 do\u011frultusunda JSON t\u00fcr\u00fcnde de hizmet sunabilmekte amma velakin esas nitelik olarak binary serialization \u00f6zelli\u011fi \u00f6n plana \u00e7\u0131kmaktad\u0131r.<\/p>\n<h5>MessagePack Taraf\u0131ndan Desteklenen Programlama Dilleri Nelerdir?<\/h5>\n<p>MessagePack i\u00e7erisinde C#, C, Pyhton, JavaScript, Ruby, Java, Php, Node.JS, Perl, Erlang, Go vs. olmak \u00fczere 50&#8217;yi a\u015fk\u0131n programlama dili taraf\u0131ndan desteklenen g\u00fcncel ve pop\u00fcler bir k\u00fct\u00fcphanedir.<\/p>\n<h5>MessagePack&#8217;i Kullanan G\u00fcn\u00fcm\u00fcz Teknolojileri Nelerdir?<\/h5>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization-300x213.png\" alt=\".NET Core&#039;da MessagePack \u0130le Binary Serialization\" width=\"300\" height=\"213\" class=\"alignleft size-medium wp-image-22971\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization-300x213.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization.png 699w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Bu sorunun cevab\u0131n\u0131 MessagePack k\u00fct\u00fcphanesinin resmi sitesi olan <a href=\"https:\/\/msgpack.org\/\" rel=\"noopener\" target=\"_blank\">msgpack.org<\/a> adresinden alabilirsiniz. \u0130lgili siteye girdi\u011finiz taktirde sol altta mevzu bahis k\u00fct\u00fcphaneyi kullanan g\u00fcn\u00fcm\u00fcz\u00fcn ciddi markalar\u0131n\u0131 ve bu markalar taraf\u0131ndan yap\u0131lm\u0131\u015f olan yorumlar\u0131 g\u00f6rebilmektesiniz. <br \/>&nbsp;<br \/>&nbsp;<\/p>\n<h3>MessagePack Kurulumu ve Kullan\u0131m\u0131<\/h3>\n<ul>\n<li><strong>Kurulum<\/strong><br \/>\n<a href=\"https:\/\/www.nuget.org\/packages\/MessagePack\/\" rel=\"noopener\" target=\"_blank\">MessagePack<\/a> k\u00fct\u00fcphanesini kurabilmek i\u00e7in Package Manager Console&#8217;da<br \/>\n<code style=\"font-size:13px;\">Install-Package MessagePack -Version 2.3.75<\/code> talimat\u0131n\u0131 verebilir ya da Powershell \u00fczerinden <code style=\"font-size:13px;\">dotnet add package MessagePack --version 2.3.75<\/code> dotnet cli komutunu verebilirsiniz.\n<\/li>\n<li><strong>Kullan\u0131m<\/strong><br \/>\nMessagePack k\u00fct\u00fcphanesinin kullan\u0131m\u0131 olduk\u00e7a basittir. Misal olarak a\u015fa\u011f\u0131daki &#8216;Person&#8217; nesnesini ilgili k\u00fct\u00fcphane ile serile\u015ftirmek istiyorsak e\u011fer<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;MessagePackObject]\r\n    public class Person\r\n    {\r\n        &#x5B;Key(&quot;name&quot;)]\r\n        public string Name { get; set; }\r\n\r\n        &#x5B;Key(&quot;surname&quot;)]\r\n        public string Surname { get; set; }\r\n\r\n        &#x5B;Key(&quot;age&quot;)]\r\n        public int Age { get; set; }\r\n    }\r\n<\/pre>\n<p>\u015feklinde \u00e7al\u0131\u015f\u0131lmas\u0131 yeterlidir. Dikkat ederseniz serile\u015ftirilecek s\u0131n\u0131f <code style=\"font-size:14px;\">MessagePackObject<\/code> attribute&#8217;u ile i\u015faretlenerek, property&#8217;lerin hangi isimlerde bas\u0131laca\u011f\u0131n\u0131n <code style=\"font-size:14px;\">Key<\/code> attribute&#8217;u ile bildirilmesi yeterli olacakt\u0131r. Ard\u0131ndan serile\u015ftirme i\u015flemi i\u00e7in a\u015fa\u011f\u0131daki \u015fekilde<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Person person = new()\r\n            {\r\n                Age = 30,\r\n                Name = &quot;Gen\u00e7ay&quot;,\r\n                Surname = &quot;Y\u0131ld\u0131z&quot;\r\n            };\r\n            byte&#x5B;] bytes = MessagePackSerializer.Serialize(person);\r\n            Person p = MessagePackSerializer.Deserialize&lt;Person&gt;(bytes);\r\n        }\r\n<\/pre>\n<p><code style=\"font-size:14px;\">MessagePackSerializer<\/code> static s\u0131n\u0131f\u0131 e\u015fli\u011finde \u00e7al\u0131\u015f\u0131lmas\u0131 yeterlidir. Ayr\u0131ca burada her bir property i\u00e7in <code style=\"font-size:14px;\">Key<\/code> attribute&#8217;unun tan\u0131mlanmas\u0131 zorunludur! Zorunlu olmas\u0131 istenmiyorsa <code style=\"font-size:14px;\">MessagePackObject<\/code> attribute&#8217;u <code style=\"font-size:14px;\">MessagePackObject<span style=\"color:red;\">(true)<\/span><\/code> olarak belirtilebilir ve b\u00f6ylece her property&#8217;nin key&#8217;ini otomatik olarak kendi ismi olarak ayarlayabilirsiniz.<\/p>\n<p>Serile\u015ftirme s\u00fcrecinde g\u00f6z ard\u0131 edilmesi istenilen property&#8217;ler <code style=\"font-size:14px;\">IgnoreMember<\/code> attribute&#8217;u ile i\u015faretlenmelidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;MessagePackObject]\r\n    public class Person\r\n    {\r\n        .\r\n        .\r\n        .\r\n        &#x5B;IgnoreMember]\r\n        public int Age { get; set; }\r\n    }\r\n<\/pre>\n<\/li>\n<li><strong>Binary Veriyi JSON Olarak Elde Etmek<\/strong><br \/>\nMessagePack ile binary olarak serile\u015ftirilmi\u015f bir veriyi JSON format\u0131nda elde etmek istiyorsak e\u011fer <code style=\"font-size:14px;\">MessagePackSerializer<\/code> static s\u0131n\u0131f\u0131n\u0131n <code style=\"font-size:14px;\">ConvertToJson<\/code> metodu a\u015fa\u011f\u0131daki gibi kullan\u0131labilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Person person = new()\r\n            {\r\n                Age = 30,\r\n                Name = &quot;Gen\u00e7ay&quot;,\r\n                Surname = &quot;Y\u0131ld\u0131z&quot;\r\n            };\r\n            byte&#x5B;] bytes = MessagePackSerializer.Serialize(person);\r\n            string json = MessagePackSerializer.ConvertToJson(bytes);\r\n        }\r\n<\/pre>\n<\/li>\n<li><strong>Veriyi Direkt JSON&#8217;a Serilize Etme<\/strong><br \/>\nHerhangi bir object&#8217;i MessagePack arac\u0131l\u0131\u011f\u0131yla direkt olarak JSON&#8217;a serilize edebilmek i\u00e7in <code style=\"font-size:14px;\">MessagePackSerializer<\/code> static s\u0131n\u0131f\u0131n\u0131n <code style=\"font-size:14px;\">SerializeToJson<\/code> metodu kullan\u0131labilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Person person = new()\r\n            {\r\n                Age = 30,\r\n                Name = &quot;Gen\u00e7ay&quot;,\r\n                Surname = &quot;Y\u0131ld\u0131z&quot;\r\n            };\r\n            string json = MessagePackSerializer.SerializeToJson(person);\r\n        }\r\n<\/pre>\n<\/li>\n<li><strong>Struct veya Record Yap\u0131lanmalar\u0131nda Serilizasyon \u0130\u015flemi<\/strong><br \/>\nMessagePack; class&#8217;lar da oldu\u011fu gibi struct ve record yap\u0131lanmalar\u0131nda da serilizasyon i\u015flemi ger\u00e7ekle\u015ftirebilmektedir. Misal olarak a\u015fa\u011f\u0131da bir record modelinin serilize ve deserilize i\u015flemlerini inceleyebilirsiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;MessagePackObject]\r\n    public record MyRecord(&#x5B;property: Key(&quot;myProperty1&quot;)] int MyProperty1, &#x5B;property: Key(&quot;myProperty2&quot;)] string MyProperty2)\r\n    {\r\n\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            MyRecord record = new(199, &quot;bla bla bla&quot;);\r\n\r\n            byte&#x5B;] bytes = MessagePackSerializer.Serialize(record);\r\n            MyRecord myRecord = MessagePackSerializer.Deserialize&lt;MyRecord&gt;(bytes);\r\n        }\r\n<\/pre>\n<p>Burada dikkat edilmesi gereken husus ilgili record modelinin access modifier&#8217;\u0131n\u0131n public olarak ayarlanmas\u0131d\u0131r. Aksi taktirde serilizasyon s\u00fcrecinde a\u015fa\u011f\u0131daki hatayla kar\u015f\u0131la\u015f\u0131lacakt\u0131r.<\/p>\n<div style=\"text-align:center;\"><em>MessagePack.MessagePackSerializationException: &#8216;Failed to serialize ConsoleApp1.MyRecord value.&#8217;<\/em><\/div>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization-1.png\" alt=\".NET Core&#039;da MessagePack \u0130le Binary Serialization\" width=\"681\" height=\"191\" class=\"aligncenter size-full wp-image-23000\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization-1.png 681w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization-1-300x84.png 300w\" sizes=\"auto, (max-width: 681px) 100vw, 681px\" \/><\/a>\n<\/li>\n<li><strong>Serialization Callback<\/strong><br \/>\nBazen serilizasyon s\u00fcrecinde \u00f6nc\u00fc ve art\u00e7\u0131 kontroller yapmak isteyebiliriz. Bunun i\u00e7in serilize edilecek modele <code style=\"font-size:13px;\">IMessagePackSerializationCallbackReceiver<\/code> aray\u00fcz\u00fc uygulanarak <code style=\"font-size:13px;\">OnBeforeSerialize<\/code> ve <code style=\"font-size:13px;\">OnAfterDeserialize<\/code> metotlar\u0131 e\u015fli\u011finde bu i\u015flemleri ger\u00e7ekle\u015ftirebiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;MessagePackObject(true)]\r\n    public class Person : IMessagePackSerializationCallbackReceiver\r\n    {\r\n        .\r\n        .\r\n        .\r\n\r\n        public void OnBeforeSerialize()\r\n        {\r\n            Console.WriteLine(&quot;Serilizasyon \u00f6ncesi...&quot;);\r\n        }\r\n        public void OnAfterDeserialize()\r\n        {\r\n            Console.WriteLine(&quot;Serilizasyon sonras\u0131...&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<\/li>\n<li><strong>G\u00fcvenlik<\/strong><br \/>\nSerilizasyon ve deserilazyon s\u00fcre\u00e7lerinde dikkat edilmesi gereken bir hususta g\u00fcvenilir olmayan kaynaklardan gelen verilerdir. G\u00fcvenilmeyen veriler belli ba\u015fl\u0131 kodlar\u0131 y\u00fcr\u00fctebilir ve uygulamay\u0131 olumsuz olarak etkileyebilir. Bunun i\u00e7in MessagePack k\u00fct\u00fcphanesinde, g\u00fcvenilir olmayan veriler \u00fczerinde i\u015flem ger\u00e7ekle\u015ftirirken a\u015fa\u011f\u0131daki gibi g\u00fcvenli moda ge\u00e7i\u015f sa\u011flanabilmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Person person = new();\r\n            byte&#x5B;] bytes = MessagePackSerializer.Serialize(person);\r\n\r\n            MessagePackSerializerOptions options = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData);\r\n            Person person2 = MessagePackSerializer.Deserialize&lt;Person&gt;(bytes, options);\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funda g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere <code style=\"font-size:13px;\">MessagePackSerializerOptions<\/code> t\u00fcr\u00fcnden bir nesne \u00fczerinden ilgili verinin g\u00fcvenilir olmad\u0131\u011f\u0131 bildirilerek g\u00fcvenli moda ge\u00e7i\u015f yap\u0131p i\u015flemler y\u00fcr\u00fct\u00fclebilmektedir.\n<\/li>\n<li><strong>Key(Indexed) Attribute&#8217;u<\/strong><br \/>\nBir nesnenin serile\u015ftirilmesi s\u00fcrecinde <code style=\"font-size:14px;\">Key<\/code> attribute&#8217;u ile property&#8217;lerinin i\u015faretlenmesi gerekti\u011fini \u00f6nceden konu\u015fmu\u015ftuk. <code style=\"font-size:14px;\">Key<\/code> attribute&#8217;u, string ve int olmak \u00fczere iki parametre almaktad\u0131r. Burada performans a\u00e7\u0131s\u0131ndan string&#8217;in daha ideal oldu\u011fundan bahsedilmektedir. Ayn\u0131 zamanda hata ay\u0131klama s\u00fcre\u00e7lerinde string olarak verilmi\u015f de\u011ferler, int de\u011ferlere nazaran hatan\u0131n yakalanmas\u0131nda daha anlaml\u0131 neticeler d\u00f6nebilmektedir. E\u011fer ki, <code style=\"font-size:14px;\">Key<\/code> attribute&#8217;u int olarak kullan\u0131lacaksa bunun 0&#8217;dan ba\u015flayarak ard\u0131\u015f\u0131k bir \u015fekilde belirtilmi\u015f olmas\u0131 gerekmektedir. Bu durumda ilgili model \u00fczerinde yeni bir property&#8217;nin eklenmesi yahut silinmesi durumlar\u0131na istinaden ard\u0131\u015f\u0131k d\u00fczenin tekrar sa\u011flanmas\u0131 i\u00e7in ba\u015ftan sona elden ge\u00e7irilmesi gerekti\u011fi anlam\u0131na gelmektedir. Ayr\u0131ca <code style=\"font-size:14px;\">Key<\/code> de\u011ferlerinin ard\u0131\u015f\u0131k olmad\u0131\u011f\u0131 bir serilizasyon neticesinde ilgili property de\u011ferleri aras\u0131nda kar\u015f\u0131l\u0131\u011f\u0131 olmayan noktalar\u0131n null olarak geldi\u011fi g\u00f6r\u00fclecektir.<\/p>\n<p>Misal olarak a\u015fa\u011f\u0131daki kod blo\u011funu inceleyebilirsiniz;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;MessagePackObject]\r\n    public class Person\r\n    {\r\n        &#x5B;Key(2)]\r\n        public string Name { get; set; }\r\n        &#x5B;Key(5)]\r\n        public string Surname { get; set; }\r\n        &#x5B;Key(7)]\r\n        public int Age { get; set; }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Person person = new()\r\n            {\r\n                Age = 30,\r\n                Name = &quot;Gen\u00e7ay&quot;,\r\n                Surname = &quot;Y\u0131ld\u0131z&quot;\r\n            };\r\n            string serialized = MessagePackSerializer.SerializeToJson(person);\r\n            Console.WriteLine(serialized);\r\n        }\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization-2.png\" alt=\".NET Core&#039;da MessagePack \u0130le Binary Serialization\" width=\"383\" height=\"20\" class=\"aligncenter size-full wp-image-23010\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization-2.png 383w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/09\/NET-Coreda-MessagePack-Ile-Binary-Serialization-2-300x16.png 300w\" sizes=\"auto, (max-width: 383px) 100vw, 383px\" \/><\/a>\n<\/li>\n<\/ul>\n<p>Nihai olarak;<br \/>\nG\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131mlar\u0131n\u0131n farkl\u0131 uygulamalarla entegrasyon s\u00fcre\u00e7lerinde \u00f6zellikle verileri serilizasyona tabi tutarak haberle\u015fmeyi ger\u00e7ekle\u015ftirmelerinin \u00f6nem kazand\u0131\u011f\u0131 \u015fu g\u00fcnlerde buradaki maliyet bizler a\u00e7\u0131s\u0131ndan olduk\u00e7a kritik arz etmekte ve minimize edilmeyi gerektirmektedir. Dolay\u0131s\u0131yla bizlerde MessagePack gibi g\u00fczel ve performansl\u0131 bir k\u00fct\u00fcphaneyle verilerimizi binary format\u0131 hedefleyen d\u00f6n\u00fc\u015f\u00fcmlerle daha h\u0131zl\u0131 ve dinamik bir \u015fekilde serile\u015ftirebilmekte ve gerekli i\u015flemlere yahut farkl\u0131 servislere sunabilmekteyiz&#8230;<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde, programlama s\u00fcre\u00e7lerinde verilerimizi binary olarak kat be kat fazla performansla serile\u015ftirmemizi sa\u011flayacak olan MessagePack k\u00fct\u00fcphanesini .NET Core e\u015fli\u011finde inceliyor olaca\u011f\u0131z. \u0130\u00e7eri\u011fimiz boyunca MessagePack k\u00fct\u00fcphanesi nedir? hangi teknolojiler taraf\u0131ndan tercih edilmektedir? ne&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2739],"tags":[4394,4395,4396,4393,4397,4398],"class_list":["post-22956","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net-core","tag-net-core-messagepack","tag-asp-net-core-messagepack","tag-c-messagepack","tag-messagepack","tag-messagepack-kutuphanesi","tag-messagepack-library"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/22956","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=22956"}],"version-history":[{"count":54,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/22956\/revisions"}],"predecessor-version":[{"id":23013,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/22956\/revisions\/23013"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3014"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=22956"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=22956"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=22956"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}