{"id":185,"date":"2020-05-08T14:32:44","date_gmt":"2020-05-08T05:32:44","guid":{"rendered":"http:\/\/sumomo.ohwaki.jp\/wordpress\/?p=185"},"modified":"2020-05-08T15:42:41","modified_gmt":"2020-05-08T06:42:41","slug":"system-text-json%e3%83%8d%e3%83%bc%e3%83%a0%e3%82%b9%e3%83%9a%e3%83%bc%e3%82%b9","status":"publish","type":"post","link":"https:\/\/sumomo.ohwaki.jp\/wordpress\/?p=185","title":{"rendered":"System.Text.Json\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9"},"content":{"rendered":"\n<p>.net\u3067JSON\u3092\u6271\u3046\u5834\u5408\u3001Newtonsoft.JSON\u3092\u4f7f\u7528\u3059\u308b\u306e\u304c\u4e00\u822c\u7684\u3067\u3042\u3063\u305f\u304c\u3001dotnet core 3\u304b\u3089\u3001System.Text.Json\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u3001\u8a66\u3057\u3066\u307f\u305f\u3002\u307e\u305a\u3001\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba(POCO\u304b\u3089JSON\u3078\u306e\u5909\u63db)\u3092\u8a66\u3057\u3066\u307f\u308b\u3002<br>\u2193\u306e\u3088\u3046\u306a\u30af\u30e9\u30b9\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092JSON\u3078\u5909\u63db\u3057\u3066\u307f\u3088\u3046\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-csharp\" data-file=\"Person\u30af\u30e9\u30b9\" data-lang=\"C#\"><code>class Person {\n    public string Name { get; set; }\n    public DateTime Birthday { get; set; }\n    public List&lt;MailAddress&gt; Mail {get; set;}\n    [JsonIgnore] \/\/ \u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u6642\u306b\u7121\u8996\u3059\u308b(JSON\u306b\u5410\u304d\u51fa\u3055\u306a\u3044)\u30d7\u30ed\u30d1\u30c6\u30a3\n    public int Age {\n        get =&gt; Period.Between(LocalDate.FromDateTime(Birthday),LocalDate.FromDateTime(DateTime.Now)).Years;\n    }\n    public override string ToString() {\n        string retstr = $&quot;Name={Name}, Birthday={Birthday.ToString(&quot;yyyy\/MM\/dd&quot;)}({Age})&quot;;\n        foreach(var m in Mail) {\n            retstr += $&quot;\\r\\n\\t{m}&quot;;\n        }\n        return retstr;\n    }\n}\nclass MailAddress {\n    public string Address {get; set;}\n    public string DisplayName { get; set; }\n    public override string ToString() {\n        return $&quot;{DisplayName}&lt;{Address}&gt;&quot;;\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u5024\u3092\u8a2d\u5b9a\u3057\u3066\u30fb\u30fb\u30fb<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-csharp\" data-file=\"\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u4f5c\u6210\" data-lang=\"C#\"><code>List&lt;Person&gt; personel = new List&lt;Person&gt;() {\n    new Person() {\n            Name = &quot;T.Sumomo&quot;,\n            Birthday = DateTime.Parse(&quot;1964\/02\/03&quot;),\n            Mail = new List&lt;MailAddress&gt;() {\n                new MailAddress() { Address = &quot;t.sumomo@momo.com&quot;, DisplayName = &quot;Taro Sumomo&quot; },\n                new MailAddress() { Address = &quot;t-sumomo@gmail.com&quot;, DisplayName = &quot;\u3059\u3082\u3082\u304b\u3089\u751f\u307e\u308c\u305f\u3059\u3082\u3082\u592a\u90ce&quot; }\n            }\n    },\n    new Person() {\n            Name = &quot;J.Sumomo&quot;,\n            Birthday = DateTime.Parse(&quot;1976\/12\/13&quot;),\n            Mail = new List&lt;MailAddress&gt;() {\n                new MailAddress() { Address = &quot;j.sumomo@momo.com&quot;, DisplayName = &quot;Jiro Sumomo&quot; },\n                new MailAddress() { Address = &quot;j-sumomo@live.com&quot;, DisplayName = &quot;\u30b8\u30ed\u30fc\u30fb\u30c1\u30a7\u30a4\u30f3\u30b8&quot; }\n            }\n    },\n    new Person() {\n            Name = &quot;S.Sumomo&quot;,\n            Birthday = DateTime.Parse(&quot;1989\/06\/25&quot;),\n            Mail = new List&lt;MailAddress&gt;() {\n                new MailAddress() { Address = &quot;s.sumomo@momo.com&quot;, DisplayName = &quot;Sabro Sumomo&quot; },\n                new MailAddress() { Address = &quot;s-sumomo@hotmail.com&quot;, DisplayName = &quot;\u3059\u3082\u3082\u30b5\u30d6\u30ed\uff5e&quot; }\n            }\n    }\n};<\/code><\/pre><\/div>\n\n\n\n<p>\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u3092\u3059\u308b\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-csharp\" data-file=\"\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\" data-lang=\"C#\"><code>Console.WriteLine(&quot;Serialize&quot;);\n\/\/ \u7d50\u679c\u306b\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u4ed8\u3051\u3088\u3046\nvar opt = new JsonSerializerOptions() {\n    WriteIndented = true\n};\n\/\/ \u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\nstring jsonstr = JsonSerializer.Serialize(personel,opt);\nConsole.WriteLine($&quot;JSON String={jsonstr}&quot;);<\/code><\/pre><\/div>\n\n\n\n<p>\u7d50\u679c\u306f<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-json\" data-file=\"\u7d50\u679c\" data-lang=\"JSON\"><code>Serialize\nJSON String=[\n  {\n    &quot;Name&quot;: &quot;T.Sumomo&quot;,\n    &quot;Birthday&quot;: &quot;1964-02-03T00:00:00&quot;,\n    &quot;Mail&quot;: [\n      {\n        &quot;Address&quot;: &quot;t.sumomo@momo.com&quot;,\n        &quot;DisplayName&quot;: &quot;Taro Sumomo&quot;\n      },\n      {\n        &quot;Address&quot;: &quot;t-sumomo@gmail.com&quot;,\n        &quot;DisplayName&quot;: &quot;\\u3059\\u3082\\u3082\\u304B\\u3089\\u751F\\u307E\\u308C\\u305F\\u3059\\u3082\\u3082\\u592A\\u90CE&quot;\n      }\n    ]\n  },\n\u30fb\u30fb\u30fb\n]<\/code><\/pre><\/div>\n\n\n\n<p>\u3068\u3001\u3053\u3093\u306a\u5f62\u306b\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u3055\u308c\u308b\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u3001\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u3055\u308c\u305fJSON\u3092\u30c7\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba(JSON\u21d2POCO)\u3057\u3066\u307f\u308b\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-csharp\" data-file=\"\u30c7\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\" data-lang=\"C#\"><code>Console.WriteLine(&quot;Deserialize&quot;);\n\/\/ \u5148\u307b\u3069\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u3057\u305fJSON\u3092\u30c7\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\nvar person = JsonSerializer.Deserialize&lt;List&lt;Person&gt;&gt;(jsonstr);\nforeach(var p in person) {\n    Console.WriteLine(p);\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u7d50\u679c\u306f<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-plane\" data-file=\"\u7d50\u679c\"><code>Deserialize\nName=T.Sumomo, Birthday=1964\/02\/03(56)\n        Taro Sumomo&lt;t.sumomo@momo.com&gt;\n        \u3059\u3082\u3082\u304b\u3089\u751f\u307e\u308c\u305f\u3059\u3082\u3082\u592a\u90ce&lt;t-sumomo@gmail.com&gt;\nName=J.Sumomo, Birthday=1976\/12\/13(43)\n        Jiro Sumomo&lt;j.sumomo@momo.com&gt;\n        \u30b8\u30ed\u30fc\u30fb\u30c1\u30a7\u30a4\u30f3\u30b8&lt;j-sumomo@live.com&gt;\nName=S.Sumomo, Birthday=1989\/06\/25(30)\n        Sabro Sumomo&lt;s.sumomo@momo.com&gt;\n        \u3059\u3082\u3082\u30b5\u30d6\u30ed\uff5e&lt;s-sumomo@hotmail.com&gt;<\/code><\/pre><\/div>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001\u7d50\u69cb\u7c21\u5358\u306bJSON\u3092\u6271\u3046\u3053\u3068\u304c\u3067\u304d\u308b\u3002<br>\u306a\u304a\u3001\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\/\u30c7\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u4ee5\u5916\u306b\u3082\u3001JsonDocument\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001DOM\u306e\u3088\u3046\u306a\u30a2\u30af\u30bb\u30b9\u65b9\u6cd5\u3082\u53ef\u80fd\u3002<\/p>\n\n\n\n<p>\u3061\u306a\u307f\u306b\u3001\u4eca\u56de\u8a66\u3057\u305f\u306e\u306f.NET 5 Preview 3\u3002MS\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u898b\u308b\u9650\u308a\u3067\u306f.net core 3.0\u304b\u3089\u4f7f\u7528\u3067\u304d\u308b\u306f\u305a\u3002<\/p>\n\n\n\n<p>\u5f8c\u3001\u4e0b\u8a18using\u3092\u5fd8\u308c\u305a\u306b\u306d\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism undefined-numbers lang-csharp\" data-file=\"using\" data-lang=\"C#\"><code>using System.Text.Json;\nusing System.Text.Json.Serialization;<\/code><\/pre><\/div>\n\n\n\n<p>\u7d30\u304b\u3044\u3068\u3053\u308d\u307e\u3067\u306f\u898b\u3066\u3044\u306a\u3044\u3051\u3069\u3001\u7c21\u5358\u306a\u4f7f\u3044\u65b9\u306a\u3089\u3001Newtonsoft.JSON\u3092\u7f6e\u304d\u63db\u3048\u308b\u3053\u3068\u306f\u3067\u304d\u305d\u3046\u3060\u306d\u3002<\/p>\n\n\n\n<p>\u53c2\u8003\u30b5\u30a4\u30c8 <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/standard\/serialization\/system-text-json-overview\">JSON serialization and deserialization (marshalling and unmarshalling) in .NET &#8211; overview<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>.net\u3067JSON\u3092\u6271\u3046\u5834\u5408\u3001Newtonsoft.JSON\u3092\u4f7f\u7528\u3059\u308b\u306e\u304c\u4e00\u822c\u7684 &hellip; <a href=\"https:\/\/sumomo.ohwaki.jp\/wordpress\/?p=185\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,11,4],"tags":[],"class_list":["post-185","post","type-post","status-publish","format-standard","hentry","category-c","category-dotnetcore","category-4"],"_links":{"self":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=185"}],"version-history":[{"count":14,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/185\/revisions"}],"predecessor-version":[{"id":199,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/185\/revisions\/199"}],"wp:attachment":[{"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sumomo.ohwaki.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}