2

職場で Asana を使用していくつかの機能を自動化するプログラムを作成していますが、少し行き詰っています。複数のタスクをワークスペースに送信し、それぞれのタスク ID を取得することはできますが、応答の ID 部分のみを取得して C# の配列またはリストに格納する方法を考えていました。

GET からの応答/tasks?workspace=<workspace-id>&assignee=meは次のとおりです。

{"data":[{"id":2177890732156,"name":"<name of my task>"}]}

すべてのタスクの ID 番号を配列に格納して、それぞれに addProject PUT を実行できるようにします。

シリアライザーを使用してデータ要素を POST 用の適切な辞書に入れていますが、それを逆にして応答の int 部分のみを解析し、それを配列に格納して呼び出す方法があるかどうか疑問に思っています。

シリアライザのコードは次のとおりです。

public static string GetJsonByObject(object _object)
    {
        /// Serialize to JSON
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(_object.GetType());
        MemoryStream ms = new MemoryStream();
        serializer.WriteObject(ms, _object);
        return Encoding.Default.GetString(ms.ToArray());
    }

次のように、リクエストをバイト配列に格納しています。

string content;

content = GetJsonByObject(t);
bArrContent = Encoding.UTF8.GetBytes(content);
            request.GetRequestStream().Write(bArrContent, 0, bArrContent.Length);
            request.GetRequestStream().Close();
4

1 に答える 1

1

いくつかの Regex-fu を使用して ID フィールドを解析し、それらを保存することは確かに可能です。しかし、それは厄介なことです。JSON や XML などの構造化データ形式は、他の誰かの解析ライブラリに面倒な作業を任せるために存在します。

したがって、提案 1: DataContractSerializer の代わりにJSON.Netを使用します。それはあまり吸わない。

これは提案 2 につながります: ライブラリを使用してデータをきれいに逆シリアル化し、Linq を使用して ID 要素を取得します。

JObject jobj = JObject.Parse(serializedData);
UInt64[] idArr = ((JArray)jobj["data"]).Select(jItem => UInt64.Parse((string)((JObject)jItem["id"]))).ToArray();

これで、idArr の配列として ID のリストが得られるはずです。

于 2012-10-16T22:13:16.813 に答える