2017年2月28日 星期二

Json.Net 用法

首先用最基本的JsonTextWriter和JsonTextReader
JsonTextWriter使用成對的方法來輸出Json字串
JsonTextReader使用Read方法來持續讀取Json字串
看得出來在使用上有點拖泥帶水
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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可以簡化一點
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 淮備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這一個方式,用法也很直覺

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 淮備資料
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();
執行結果

from : http://blog.developer.idv.tw/2013/06/jsonnet.html

沒有留言:

張貼留言