2013年6月27日 星期四

Json.Net 用法

首先用最基本的JsonTextWriter和JsonTextReader
JsonTextWriter使用成對的方法來輸出Json字串
JsonTextReader使用Read方法來持續讀取Json字串
看得出來在使用上有點拖泥帶水
static void Main(string[] args)
{
    string jsonString = string.Empty;

    using (StringWriter sw = new StringWriter())
    {
        using (JsonTextWriter writer = new JsonTextWriter(sw))
        {
            // 開始輸出物件
            writer.WriteStartObject();

            // 輸出屬性:id
            writer.WritePropertyName("id");
            writer.WriteValue(1);

            // 輸出屬性:name
            writer.WritePropertyName("name");
            writer.WriteValue("xian");

            // 輸出屬性today
            writer.WritePropertyName("today");
            writer.WriteValue(DateTime.Today);

            // 開始輸出陣列
            writer.WritePropertyName("arraydata");
            writer.WriteStartArray();
            writer.WriteValue(1);
            writer.WriteValue(2);
            writer.WriteValue(3);

            // 結束輸出陣列
            writer.WriteEndArray();

            // 結束串出物件
            writer.WriteEndObject();
        }

        jsonString = sw.ToString();
        Console.WriteLine(jsonString);
    }

    using (StringReader sr = new StringReader(jsonString))
    {
        using (JsonTextReader reader = new JsonTextReader(sr))
        {
            while (reader.Read())
            {
                if (reader.Value != null)
                {
                    Console.WriteLine("token:{0}, value:{1}", reader.TokenType, reader.Value);
                }
                else
                {
                    Console.WriteLine("token:{0}", reader.TokenType);
                }
            }
        }
    }

    Console.ReadLine();
}

執行結果

使用JObject可以簡化一點
// 淮備Json資料
JObject obj1 = new JObject()
{
    new JProperty("id", 1),
    new JProperty("name", "xian"),
    new JProperty("today", DateTime.Today),
    new JProperty("arraydata", 
    new JArray()
    {
        new JValue(1),
        new JValue(2),
        new JValue(3),
    })
};

string jsonString = obj1.ToString();
Console.WriteLine(jsonString);

// 解析Json格式
JObject obj2 = JObject.Parse(jsonString);
Console.WriteLine(
    "id:{0}, name:{1}, today:{2}, arraydata:{3}",
    obj2["id"],
    obj2["name"],
    obj2["today"],
    obj2["arraydata"]);
Console.ReadLine();
執行結果

最常使用還是JsonConvert這一個方式,用法也很直覺

// 淮備資料
Person p1 = new Person()
{
    id = 1,
    name = "xian",
    today = DateTime.Today
};

// 序列化物件
string jsonString = JsonConvert.SerializeObject(p1);
Console.WriteLine("jsonstring:{0}", jsonString);

// 反序列化物件
Person p2 = JsonConvert.DeserializeObject<Person>(jsonString);
Console.WriteLine("id:{0}, name:{1}, today:{2}", p2.id, p2.name, p2.today);

Console.ReadLine();
執行結果