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:使用JSON.Net而不是 DataContractSerializer。吸的少了。

这导致了建议 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 回答