WPF_JSON操作

Newtonsoft.Json

Newtonsoft.Jsonとは

Newtonsoft.Json(JSON.NET)は、C#向けのJSON 用のライブラリです。

MITライセンスで公開されています。

利用するには、NuGet で Newtonsoft.Jsonライブラリの追加します。

newtonsoft.comサンプルに多くの記述例がありますので参考になります。


JSONオブジェクトと文字列の相互変換

あらかじめクラスを作成しておき、要素を定義しておきます。


using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;

namespace WpfPrismMvvm
{
    public class UserInfo
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public bool DeleteFlag { get; set; }
        public DateTime CreatedDate { get; set; }
        public IList<string> Roles { get; set; }
        public Dictionary<string, int> Personal { get; set; }
    }

    public class MainWindowModel
    {
        public void JsonStringify()
        {
            UserInfo info = new UserInfo
            {
                Name = "Json",
                Age = 17,
                DeleteFlag = false,
                CreatedDate = new DateTime(2003, 1, 1, 0, 0, 0, DateTimeKind.Utc),
                Roles = new List<string>
                {
                    "Administrator",
                    "User",
                },
                Personal = new Dictionary<string, int>
                {
                    { "uid", 1001 },
                    { "gid", 300 }
                },
            };
            string SerializedJson = JsonConvert.SerializeObject(info, Formatting.Indented);
            Console.WriteLine(SerializedJson);
        }

        public void JsonParse()
        {
            string json = @"{
                'Name': 'Json',
                'Age': 17,
                'DeleteFlag': false,
                'CreatedDate': '2003-01-01T00:00:00Z',
                'Roles': [
                    'Administrator',
                    'User'
                ],
                'Personal': {
                    'uid': 1001,
                    'gid': 300
                }
            }";
            UserInfo info = JsonConvert.DeserializeObject<UserInfo>(json);
            Console.WriteLine(info.CreatedDate);
        }
    }
}

JSONファイル読み書き

オブジェクトの要素をクラス定義しておき、そのデータをファイル操作します。


    public class MainWindowModel
    {
        public void JsonWrite1()
        {
            UserInfo data = new UserInfo();
            data.Name = "json1";
            data.Created = new DateTime(2016, 12, 23, 0, 30, 30);

            File.WriteAllText(@"c:\test\data1.json", JsonConvert.SerializeObject(data));
        }

        public void JsonWrite2()
        {
            UserInfo data = new UserInfo();
            data.Name = "json2";
            data.Created = new DateTime(2016, 12, 24, 23, 59, 59);

            using (StreamWriter file = File.CreateText(@"c:\test\data2.json"))
            {
                JsonSerializer serializer = new JsonSerializer();
                serializer.Serialize(file, data);
            }
        }

        public void JsonRead1()
        {
            UserInfo data = JsonConvert.DeserializeObject<UserInfo>(File.ReadAllText(@"c:\test\data1.json"));

            System.Console.WriteLine(data.Name + "-" + data.Created);
        }

        public void JsonRead2()
        {
            using (StreamReader file = File.OpenText(@"c:\test\data2.json"))
            {
                JsonSerializer serializer = new JsonSerializer();
                UserInfo data = (UserInfo)serializer.Deserialize(file, typeof(UserInfo));

                System.Console.WriteLine(data.Name + "-" + data.Created);
            }
        }
    }

JObjectの利用

Json.NET の Objectを利用することで、可変オブジェクトを扱うことが可能です。


public void JsonPrint()
{
    // JSON Object(Json.Linq)
    dynamic json = new JObject();
    json.Name = "json";
    json.Age = 20;
    Console.WriteLine(json.ToString());
}


DataContractJsonSerializer

DataContractJsonSerializerとは

DataContractJsonSerializerは、.NET Frameworkで提供されているJSON処理クラスです。

アセンブリ「System.Runtime.Serialization.dll」の参照を追加して利用します。

JSON.Netより機能は劣るものの、単純にJSON読み書きするくらいならば、十分に利用できます。

プロジェクトが諸事情によりサードパーティライブラリを使えない時に利用できます。


DynamicJson

DynamicJsonとは

DynamicJsonは、dynamic(C# 4.0で導入)を活用することでJSONを簡単に扱えるようにするライブラリです。

ライセンスはMs-PLです。

Json.NETほどの機能は不要であるが、DataContractJsonSerializerのように型を事前定義をせずに、簡単に利用したい場合に利用できます。



関連ページ