JSONでこういう書き方
[ { "name" : "task1", "params" : { "param1_task1" : 1, "param2_task1" : 2, "param3_task1" : 3 } }, { "name" : "task2", "params" : { "param1_task2" : 1, "param2_task2" : 2 } }, { "name" : "task_end", "params" : { "param1_task3" : "hogehgoe", "param2_task3" : [1,2,3,4] } } ]
HTTPでjsonのstringを受け取ってサーバー側でパースしてタスクを実行するっていうプログラムを書いているんですが、タスクごとに異なったパラメータを与えたいという問題に対してどうアプローチするかってのがよくわかりません・・・
各タスクが取るパラメータは、それぞれ異なっていて、名前も違えば型も違う。そういう状況にはどう対処すべきなんでしょうか。
解決策(とりあえず)
1つ考えてみた方法としては、jsonをパースするにはするんですが、それをいきなりクラスに変換して持つのではなく、シリアライズしてStringで持っておいてタスク実行時に再度パースするというやり方。ぜんぜんスマートじゃない。
class Param { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("params")] public JObject Parameters { get; set; } public string ParamString { get; set; } } // 略 var result = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Param>>(strParam); if (result[i].Name == "task1") { var tmp = result[i].Parameters.ToObject<ParamTask1>(); result[i].ParamString = JsonConvert.SerializeObject(tmp); } // 略
みたいな。Parameters
とParamString
という2つの変数で重複しているのでなんだかクソ無駄な気がしますが。
あれ?
???「JObjectで持っておいて、都度`ToObject`するんじゃダメなのか?」
あれれ?何か難しく考えすぎてたっぽい?
あほでした(完)
カーリーポテトフライ再来!
知る人ぞ知るマックのカーリーポテトフライ。めっちゃ好きなんですけど、今年再び登場すると聞いて舞い上がりました。
去年もしっかり食べてブログに書いてます↓
今年のカーリーポテトフライは箱のデザインが新しくなり、記憶より量が多く感じられました。
残念なのは揚げたてじゃなくてちょっと冷めたのが出てきたこと。揚げたてはサイコーなのでおためしあれ~