{"id":7608,"date":"2024-03-14T06:46:05","date_gmt":"2024-03-14T06:46:05","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/"},"modified":"2025-08-02T18:27:22","modified_gmt":"2025-08-02T18:27:22","slug":"how-to-customize-serialization-in-c","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/","title":{"rendered":"Customize C# Serialization Guide"},"content":{"rendered":"<p>In C#, you can customize the way objects are serialized by implementing the ISerializable interface. This interface requires implementing the GetObjectData method and a constructor, which allows you to manually control the serialization and deserialization process of the object.<\/p>\n<p>Here is a simple example demonstrating how to customize the serialization of a Student class.<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">using<\/span> System;\r\n<span class=\"hljs-keyword\">using<\/span> System.IO;\r\n<span class=\"hljs-keyword\">using<\/span> System.Runtime.Serialization;\r\n<span class=\"hljs-keyword\">using<\/span> System.Runtime.Serialization.Formatters.Binary;\r\n\r\n[<span class=\"hljs-meta\">Serializable<\/span>]\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Student<\/span> : <span class=\"hljs-title\">ISerializable<\/span>\r\n{\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-built_in\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-built_in\">int<\/span> Age { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\r\n\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">Student<\/span>(<span class=\"hljs-params\"><span class=\"hljs-built_in\">string<\/span> name, <span class=\"hljs-built_in\">int<\/span> age<\/span>)<\/span>\r\n    {\r\n        <span class=\"hljs-keyword\">this<\/span>.Name = name;\r\n        <span class=\"hljs-keyword\">this<\/span>.Age = age;\r\n    }\r\n\r\n    <span class=\"hljs-comment\">\/\/ \u81ea\u5b9a\u4e49\u5e8f\u5217\u5316\u65b9\u6cd5<\/span>\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">GetObjectData<\/span>(<span class=\"hljs-params\">SerializationInfo info, StreamingContext context<\/span>)<\/span>\r\n    {\r\n        info.AddValue(<span class=\"hljs-string\">\"Name\"<\/span>, <span class=\"hljs-keyword\">this<\/span>.Name);\r\n        info.AddValue(<span class=\"hljs-string\">\"Age\"<\/span>, <span class=\"hljs-keyword\">this<\/span>.Age);\r\n    }\r\n\r\n    <span class=\"hljs-comment\">\/\/ \u81ea\u5b9a\u4e49\u53cd\u5e8f\u5217\u5316\u65b9\u6cd5<\/span>\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title\">Student<\/span>(<span class=\"hljs-params\">SerializationInfo info, StreamingContext context<\/span>)<\/span>\r\n    {\r\n        <span class=\"hljs-keyword\">this<\/span>.Name = (<span class=\"hljs-built_in\">string<\/span>)info.GetValue(<span class=\"hljs-string\">\"Name\"<\/span>, <span class=\"hljs-keyword\">typeof<\/span>(<span class=\"hljs-built_in\">string<\/span>));\r\n        <span class=\"hljs-keyword\">this<\/span>.Age = (<span class=\"hljs-built_in\">int<\/span>)info.GetValue(<span class=\"hljs-string\">\"Age\"<\/span>, <span class=\"hljs-keyword\">typeof<\/span>(<span class=\"hljs-built_in\">int<\/span>));\r\n    }\r\n}\r\n\r\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Program<\/span>\r\n{\r\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title\">Main<\/span>()<\/span>\r\n    {\r\n        Student student = <span class=\"hljs-keyword\">new<\/span> Student(<span class=\"hljs-string\">\"Alice\"<\/span>, <span class=\"hljs-number\">20<\/span>);\r\n\r\n        <span class=\"hljs-comment\">\/\/ \u5e8f\u5217\u5316\u5bf9\u8c61<\/span>\r\n        IFormatter formatter = <span class=\"hljs-keyword\">new<\/span> BinaryFormatter();\r\n        <span class=\"hljs-keyword\">using<\/span> (Stream stream = <span class=\"hljs-keyword\">new<\/span> FileStream(<span class=\"hljs-string\">\"student.bin\"<\/span>, FileMode.Create, FileAccess.Write, FileShare.None))\r\n        {\r\n            formatter.Serialize(stream, student);\r\n        }\r\n\r\n        <span class=\"hljs-comment\">\/\/ \u53cd\u5e8f\u5217\u5316\u5bf9\u8c61<\/span>\r\n        Student deserializedStudent;\r\n        <span class=\"hljs-keyword\">using<\/span> (Stream stream = <span class=\"hljs-keyword\">new<\/span> FileStream(<span class=\"hljs-string\">\"student.bin\"<\/span>, FileMode.Open, FileAccess.Read, FileShare.Read))\r\n        {\r\n            deserializedStudent = (Student)formatter.Deserialize(stream);\r\n        }\r\n\r\n        Console.WriteLine(<span class=\"hljs-string\">$\"Name: <span class=\"hljs-subst\">{deserializedStudent.Name}<\/span>, Age: <span class=\"hljs-subst\">{deserializedStudent.Age}<\/span>\"<\/span>);\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>In the example above, we customized the serialization and deserialization methods of the Student class by implementing the ISerializable interface. We used the BinaryFormatter to serialize and deserialize objects. In the custom serialization method, we used the SerializationInfo object to add the property values that need to be serialized, and in the custom deserialization method, we used SerializationInfo to retrieve the deserialized property values.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In C#, you can customize the way objects are serialized by implementing the ISerializable interface. This interface requires implementing the GetObjectData method and a constructor, which allows you to manually control the serialization and deserialization process of the object. Here is a simple example demonstrating how to customize the serialization of a Student class. using [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[314,274,9806,299,5629],"class_list":["post-7608","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-net","tag-c","tag-iserializable","tag-programming","tag-serialization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Customize C# Serialization Guide - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Learn to customize C# object serialization using ISerializable interface with practical code examples.\" \/>\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.silicloud.com\/blog\/how-to-customize-serialization-in-c\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Customize C# Serialization Guide\" \/>\n<meta property=\"og:description\" content=\"Learn to customize C# object serialization using ISerializable interface with practical code examples.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-14T06:46:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-02T18:27:22+00:00\" \/>\n<meta name=\"author\" content=\"Liam\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Liam\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/\"},\"author\":{\"name\":\"Liam\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/23786905eb7b377f45ddb01c17da7671\"},\"headline\":\"Customize C# Serialization Guide\",\"datePublished\":\"2024-03-14T06:46:05+00:00\",\"dateModified\":\"2025-08-02T18:27:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/\"},\"wordCount\":122,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"keywords\":[\".NET\",\"c#\",\"ISerializable\",\"programming\",\"Serialization\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/\",\"name\":\"Customize C# Serialization Guide - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-14T06:46:05+00:00\",\"dateModified\":\"2025-08-02T18:27:22+00:00\",\"description\":\"Learn to customize C# object serialization using ISerializable interface with practical code examples.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Customize C# Serialization Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/23786905eb7b377f45ddb01c17da7671\",\"name\":\"Liam\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g\",\"caption\":\"Liam\"},\"sameAs\":[\"http:\/\/Wilson\"],\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/liamwilson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Customize C# Serialization Guide - Blog - Silicon Cloud","description":"Learn to customize C# object serialization using ISerializable interface with practical code examples.","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.silicloud.com\/blog\/how-to-customize-serialization-in-c\/","og_locale":"en_US","og_type":"article","og_title":"Customize C# Serialization Guide","og_description":"Learn to customize C# object serialization using ISerializable interface with practical code examples.","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-14T06:46:05+00:00","article_modified_time":"2025-08-02T18:27:22+00:00","author":"Liam","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Liam","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/"},"author":{"name":"Liam","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/23786905eb7b377f45ddb01c17da7671"},"headline":"Customize C# Serialization Guide","datePublished":"2024-03-14T06:46:05+00:00","dateModified":"2025-08-02T18:27:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/"},"wordCount":122,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"keywords":[".NET","c#","ISerializable","programming","Serialization"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/","name":"Customize C# Serialization Guide - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-14T06:46:05+00:00","dateModified":"2025-08-02T18:27:22+00:00","description":"Learn to customize C# object serialization using ISerializable interface with practical code examples.","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-customize-serialization-in-c\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Customize C# Serialization Guide"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/23786905eb7b377f45ddb01c17da7671","name":"Liam","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8d37ed3e7f770dde8bf069ba0b4298688028c3abaacf1131742fc1352d174ebd?s=96&d=mm&r=g","caption":"Liam"},"sameAs":["http:\/\/Wilson"],"url":"https:\/\/www.silicloud.com\/blog\/author\/liamwilson\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/7608","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=7608"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/7608\/revisions"}],"predecessor-version":[{"id":152394,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/7608\/revisions\/152394"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=7608"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=7608"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=7608"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}