■
仕事が忙しかったのでほったらかしになっていました。不定期で気が向いたときにだらだら更新したいと思います。
最近いじっているのがJson.NETなのでそれについて書いていこうかなと思った次第です。
using System; using System.IO; using Newtonsoft.Json; public class LogEntry { public int ID { get; set; } public string Details { get; set; } public DateTime LogDate { get; set; } } namespace ConsoleApplication1 { class Program { static void Main( string[ ] args ) { LogEntry entry = new LogEntry { ID = 0, LogDate = new DateTime(2009, 2, 15, 0, 0, 0, DateTimeKind.Utc), Details = "Application started." }; // 文字列の場合 string jsonString = JsonConvert.SerializeObject( entry ); // ファイル書き出しの場合 JsonSerializer serializer = new JsonSerializer( ); using( StreamWriter sw = new StreamWriter( @".\json.txt" ) ) using( JsonWriter writer = new JsonTextWriter( sw ) ) { serializer.Serialize( writer, entry ); } } } } // Result: // {"ID":0,"Details":"Application started.","LogDate":"\/Date(1234656000000)\/"}
とプロパティをJson形式で吐き出してくれる。
プロパティを吐き出したくないのがある。そのようなときは
[JsonObject(MemberSerialization.OptIn)] public class LogEntry { public int ID { get; set; } public string Details { get; set; } public DateTime LogDate { get; set; } } // 下は変わらないので省略 // Result: // {}
となりプロパティが吐き出されるのを抑制できる。
特定のプロパティだけ吐き出す場合は、
[JsonObject( MemberSerialization.OptIn )] public class LogEntry { // これでプロパティを吐き出せるようになる [JsonProperty] public int ID { get; set; } // 特定のプロパティ名をつけることも可能 [JsonProperty("details!!!!!")] public string Details { get; set; } // あえて何もつけない public DateTime LogDate { get; set; } } // Result: // {"ID":0,"details!!!!!":"Application started."}
クラスにJsonObject( MemberSerialization.OptIn )アトリビュートを付与し、
JsonPropertyアトリビュートを各プロパティに付与するだけで簡単にシリアライズしてくれます。
逆にここだけシリアライズしたくないけれども全部にJsonPropertyつけたくないよ!というときは
public class LogEntry { public int ID { get; set; } [JsonProperty("details!!!!!")] public string Details { get; set; } //これは変えてくれるな [JsonIgnore] public DateTime LogDate { get; set; } } // Result // {"ID":0,"details!!!!!":"Application started."}
特定のプロパティにのみJsonIgnoreアトリビュートを付与することでそこだけ抑制することも可能です。
データ量的にXMLより軽いのでJsonをこの際使いこなせたら、と思っています。
Twitterなんかで受け取るデータなんかもxml,json,rss,atomが指定できるので受信データが少ない分高速化が期待できそうです。
ではまた次回、気が向いたら