動作確認環境: .NET Framework 3.5, Visual Studio 2008

更新日: 2010 年 2 月 12 日


.NET Framework 3.5 の WCF (Windows Communication Foundation) で用いられている様々な Serializer から、JSON 形式の Serializer を 利用する方法をご紹介します。

例えば姓と名を保持するクラスがあるとします。そのクラスにいくつかの属性を付加することでデータを JSON 表現に置き換えることができます。

まず、プロジェクトの参照に System.Runtime.Serialization.dll, System.ServiceModel.Web.dll を追加し、System.Runtime.Serialization 名前空間内の 2 つの属性を以下のように付加します。

C#
[DataContract]
public class Person
{
    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }

    [DataMember(Name="first")]
    public string FirstName { get; set; }
    [DataMember(Name = "last")]
    public string LastName { get; set; }
}
 

余談ですが、自動実装プロパティ を用いています。クラスなのでコンストラクターでのプロパティ参照もばっちりですね。これを Serialize してみましょう。

C#
using System;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

[DataContract]
public class Person
{
    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }

    [DataMember(Name = "first")]
    public string FirstName { get; set; }
    [DataMember(Name = "last")]
    public string LastName { get; set; }
}

class Program
{
    static void Main()
    {
        var serializer = new DataContractJsonSerializer(typeof(Person));
        var ms = new MemoryStream();

        serializer.WriteObject(ms, new Person("山田", "太郎"));
        var json = Encoding.UTF8.GetString(ms.ToArray());
        Console.WriteLine(json);
    }
}
 

コンソール アプリケーションでこのコードを実行すると、

{"first":"山田","last":"太郎"}

と表示されます。

シリアライゼーションの詳細については、MSDN ライブラリの System.Runtime.Serialization 名前空間 http://msdn.microsoft.com/ja-jp/library/system.runtime.serialization.aspx をご参照ください。


Code Recipe Code Recipe

ページのトップへ