読者です 読者をやめる 読者になる 読者になる

おはよう君需要なし

求不得苦な日々

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);
}

// 略

みたいな。ParametersParamStringという2つの変数で重複しているのでなんだかクソ無駄な気がしますが。

あれ?

???「JObjectで持っておいて、都度`ToObject`するんじゃダメなのか?」

あれれ?何か難しく考えすぎてたっぽい?

あほでした(完)