我正在创建一个程序,可以在我的工作场所使用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();
答案 0 :(得分: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列表作为一个数组。