Newtonsoft.Json(JSON.NET)は、C#向けのJSON 用のライブラリです。
MITライセンスで公開されています。
利用するには、NuGet で Newtonsoft.Jsonライブラリの追加します。
newtonsoft.comサンプルに多くの記述例がありますので参考になります。
あらかじめクラスを作成しておき、要素を定義しておきます。
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); } } }
オブジェクトの要素をクラス定義しておき、そのデータをファイル操作します。
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); } } }
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は、.NET Frameworkで提供されているJSON処理クラスです。
アセンブリ「System.Runtime.Serialization.dll」の参照を追加して利用します。
JSON.Netより機能は劣るものの、単純にJSON読み書きするくらいならば、十分に利用できます。
プロジェクトが諸事情によりサードパーティライブラリを使えない時に利用できます。
DynamicJsonは、dynamic(C# 4.0で導入)を活用することでJSONを簡単に扱えるようにするライブラリです。
ライセンスはMs-PLです。
Json.NETほどの機能は不要であるが、DataContractJsonSerializerのように型を事前定義をせずに、簡単に利用したい場合に利用できます。