はじめに
いまさらながらJsonを使うことになり、標準のJsonで使い方を調べエクステンションを使ったサンプルを作成した。
サンプルコード
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;
namespace JsonSample
{
[DataContract]
public class FriendInfo
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Address { get; set; }
[DataMember]
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
var friends = new FriendInfo[]{
new FriendInfo()
{
Name = "Name1",
Address = "Hokkaido 1",
Age = 12
},
new FriendInfo()
{
Name = "Name2",
Address = "Hokkaido 2",
Age = 13
},
};
// シリアライズ
var json = friends.ToJson();
Console.WriteLine(json);
// デシリアライズ
// 無駄なオブジェクトが発生する拡張メソッドの例
var defrie = new List<FriendInfo>().FromJson(json);
// chocolamintさんの指摘を参考にstringのエクステンションに
foreach (var info in json.DeserializingJson<List<FriendInfo>>())
Console.WriteLine("Name:{0} Adress:{1} Age:{2}", info.Name, info.Address, info.Age);
Console.ReadLine();
}
}
}
ClassExtention.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
namespace JsonSample
{
public static class ClassExtension
{
public static string ToJson<T>(this T obj) where T : class
{
var serializer = new DataContractJsonSerializer(typeof(T));
using (var stream = new MemoryStream())
{
serializer.WriteObject(stream, obj);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
public static T FromJson<T>(this T obj, string json) where T : class
{
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
var serializer = new DataContractJsonSerializer(typeof(T));
return serializer.ReadObject(stream) as T;
}
}
}
}
StringExtention.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
namespace JsonSample
{
public static class StringExtension
{
public static T DeserializingJson<T>(this string obj)
{
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(obj)))
{
var serializer = new DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(stream);
}
}
}
}