{"id":775,"date":"2020-11-20T23:19:28","date_gmt":"2020-11-20T22:19:28","guid":{"rendered":"https:\/\/www.steffen-liersch.de\/content\/de\/?p=775"},"modified":"2025-03-02T11:29:08","modified_gmt":"2025-03-02T10:29:08","slug":"liersch-json-serialization","status":"publish","type":"post","link":"https:\/\/www.steffen-liersch.de\/content\/de\/2020\/11\/liersch-json-serialization\/","title":{"rendered":"Liersch.JsonSerialization &#8211; Reflection-basierte JSON-Unterst\u00fctzung f\u00fcr .NET"},"content":{"rendered":"<p><code>Liersch.JsonSerialization<\/code> erweitert <a href=\"https:\/\/github.com\/steffen-liersch\/Liersch.Json\">Liersch.Json<\/a> um die Reflection-basierte Serialisierung und Deserialisierung. Auf Basis von <a href=\"https:\/\/github.com\/steffen-liersch\/Liersch.Reflection\">Liersch.Reflection<\/a> werden dabei Felder und Eigenschaften durch dynamisch generierten IL-Code effizient gelesen und geschrieben.<\/p>\n<p>Die Bibliothek ist f\u00fcr folgende .NET-Plattformen geeignet:<\/p>\n<ul>\n<li>ab .NET Framework 2.0<\/li>\n<li>ab .NET Core 2.0<\/li>\n<li>ab .NET Standard 2.1<\/li>\n<li>Mono<\/li>\n<\/ul>\n<p>Alle nennenswerten Bibliotheks\u00e4nderungen werden in der Datei <a href=\"https:\/\/github.com\/steffen-liersch\/Liersch.JsonSerialization\/blob\/main\/CHANGELOG.md\">CHANGELOG.md<\/a> festgehalten.<\/p>\n<h2>Verwendung der Bibliothek<\/h2>\n<p><code>Liersch.JsonSerialization<\/code> ist auf <a href=\"https:\/\/www.nuget.org\/packages\/Liersch.JsonSerialization\">NuGet<\/a> verf\u00fcgbar und kann \u00fcber diesen Wege komfortabel in neue oder bestehende Projekte integriert werden. F\u00fcr \u00e4ltere Projekte (vor .NET Framework 4.0) m\u00fcssen die Bibliothek und ihre abh\u00e4ngigen Bibliotheken manuell kompiliert und integriert werden.<\/p>\n<h2>JsonSerializer und JsonDeserializer<\/h2>\n<p>Die Klassen <code>JsonSerializer<\/code> und <code>JsonDeserializer<\/code> dienen zur Reflection-basierten Serialisierung und Deserialisierung von Klassen. Daf\u00fcr m\u00fcssen Felder und Eigenschaften lediglich mit dem Attribut <code>JsonMemberAttribute<\/code> gekennzeichnet werden. Nur \u00f6ffentliche Felder und Eigenschaften sollten mit diesem Attribut markiert werden. F\u00fcr die Deserialisierung wird ein \u00f6ffentlicher Standardkonstruktor ben\u00f6tigt.<\/p>\n<pre><code class=\"language-cs\">class Example\n{\n  [JsonMember(&quot;IntegerArray&quot;)]\n  public int[] IntegerArray;\n\n  [JsonMember(&quot;StringValue&quot;)]\n  public string StringValue;\n\n  public string NotSerializedString;\n}<\/code><\/pre>\n<p>Im folgenden Beispiel wird eine Instanz einer serialisierbaren Klasse erstellt, serialisiert und wieder deserialisiert.<\/p>\n<pre><code class=\"language-cs\">var e1=new Example();\ne1.IntegerArray=new int[] { 10, 20, 30, 700, 800 };\ne1.StringValue=&quot;Example Text&quot;;\ne1.NotSerializedString=&quot;Other Text&quot;;\n\nstring json=new JsonSerializer().Serialize(e1);\nExample e2=new JsonDeserializer().Deserialize&lt;Example&gt;(json);<\/code><\/pre>\n<h2>Lizenz<\/h2>\n<p>Die Ver\u00f6ffentlichung der Software erfolgt unter den Bedingungen einer Open-Source-Lizenz. Alternativ k\u00f6nnen im Rahmen einer kommerziellen Lizenz andere Bedingungen vereinbart werden. Sie k\u00f6nnen Pflege und Weiterentwicklung der Software mit einer <a href=\"https:\/\/www.paypal.com\/cgi-bin\/webscr?cmd=_s-xclick&amp;hosted_button_id=NVXEQCNGJFK92\">freiwilligen Spende<\/a> unterst\u00fctzen.<\/p>\n<h2>Copyright<\/h2>\n<p>Copyright \u00a9 2013-2021 Steffen Liersch<br \/>\n<a href=\"https:\/\/www.steffen-liersch.de\/\">https:\/\/www.steffen-liersch.de\/<\/a><\/p>\n<h2>Verweise<\/h2>\n<p>Der Quellcode wird auf GitHub gepflegt:<br \/>\n<a href=\"https:\/\/github.com\/steffen-liersch\/Liersch.JsonSerialization\">https:\/\/github.com\/steffen-liersch\/Liersch.JsonSerialization<\/a><\/p>\n<p>Pakete k\u00f6nnen \u00fcber NuGet heruntergeladen werden:<br \/>\n<a href=\"https:\/\/www.nuget.org\/packages\/Liersch.JsonSerialization\">https:\/\/www.nuget.org\/packages\/Liersch.JsonSerialization<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Liersch.JsonSerialization erweitert Liersch.Json um die Reflection-basierte Serialisierung und Deserialisierung. Auf Basis von Liersch.Reflection werden dabei Felder und Eigenschaften durch dynamisch generierten IL-Code effizient gelesen und geschrieben. Die Bibliothek ist f\u00fcr viele .NET-Plattformen geeignet.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[21,25,34,36,31],"class_list":["post-775","post","type-post","status-publish","format-standard","hentry","category-net","tag-net","tag-cs","tag-json","tag-open-source","tag-products"],"_links":{"self":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/775","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/comments?post=775"}],"version-history":[{"count":6,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/775\/revisions"}],"predecessor-version":[{"id":834,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/775\/revisions\/834"}],"wp:attachment":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/media?parent=775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/categories?post=775"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/tags?post=775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}