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のように型を事前定義をせずに、簡単に利用したい場合に利用できます。
関連ページ
- WPF_Prism_BindableBase
- WPF_Prism_DelegateCommand
- WPF_Prism_InteractionRequest
- WPF_Prism_CompositeCommand
- WPF_Prism_ErrorsContainer
- WPF_Prism_InvokeCommandAction
- C#