如何将以下JSON传递给C#补丁方法w或没有Javascript序列化程序
我正在开发一个程序来访问Visual Studio Team Services的REST API(是Visual Studio Online)。 我关注https://www.visualstudio.com/integrate/api/wit/work-items
我能够通过使用以下代码片段传递正确的ID来查询工作项:
var uri = new Uri("https://{instance}.visualstudio.com/DefaultCollection/_apis/wit/workitems/7?api-version=1.0"); GetWorkItem(uri); public static async void GetWorkItem(Uri uri) { try { var username = "my username"; var password = " my pass word"; using (HttpClient client = new HttpClient()) { client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String( ASCIIEncoding.ASCII.GetBytes( string.Format("{0}:{1}", username, password)))); using (HttpResponseMessage response = client.GetAsync(uri) .Result) { response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseBody); } Console.Read(); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); Console.Read(); } }
它正确返回此处指定的JSON https://www.visualstudio.com/integrate/api/wit/work-items#GetalistofworkitemsByIDs
现在我正在尝试通过修改其标题来更新工作项。
https://www.visualstudio.com/integrate/api/wit/work-items#UpdateworkitemsUpdateafield
为此,我写了一个方法:
public static async void UpdateWorkItemStatus(Uri requestUri, HttpContent iContent) { { var method = new HttpMethod("PATCH"); var request = new HttpRequestMessage(method, requestUri) { Content = iContent }; HttpResponseMessage response; try { using (HttpClient client = new HttpClient()) { var username = "my username"; var password = "my password"; client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String( ASCIIEncoding.ASCII.GetBytes( string.Format("{0}:{1}", username, password)))); response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); Console.WriteLine(response); Console.Read(); } } catch (TaskCanceledException e) { Console.WriteLine("ERROR: " + e.ToString()); Console.Read(); } } }
我通过传递我的json调用此方法:
var uri = new Uri("https://{instance}.visualstudio.com/DefaultCollection/_apis/wit/workitems/7?api-version=1.0"); string json = new JavaScriptSerializer().Serialize(new { op="replace", path="fields/System.Title", value=" 123 New Title" }); HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json-patch+json"); UpdateWorkItemStatus(uri, httpContent);
这符合https://www.visualstudio.com/integrate/api/wit/work-items#Updateworkitems中的信息
他们没有任何代码示例,所以我使用JavascriptSerializer但这没有做任何事情。 代码运行但没有输出,我的工作项也没有编辑。 由于使用了JavascriptSerializer,我不确定它的格式是否不正确,但我之前使用过这个类并且它运行良好。
基本上我需要传递这个JSON:
[ { "op": "replace", "path": "fields/System.Title", "value":"New Title" } ]
即使不使用JS Serializer类,任何有关如何运行并以正确格式传递JSON的帮助都将受到赞赏。
最终的想法是将其转换为可在Unix上运行的解释脚本,如curl,Python或Perl。 任何指针或建议也将受到赞赏。
我通常直接传递内容字符串,它的工作原理如下:
string json = "[{\"op\":\"replace\",\"path\":\"/fields/System.Title\",\"value\":\"Title\"}]";
您由JavaScriptSerializer生成的字符串json缺少“[”和“]”。
顺便说一句,使用您提供的代码,如果您在UpdateWorkItemStatus(uri,httpContent)之前运行GetWorkItem(uri),则自GetWorkItem()之后的应用程序退出时,UpdateWorkItemStatus()将不会运行。
- 使用Reflection解析函数/方法内容
- C# – 如何在不将其安装到系统中的情况下使用自定义字体
- 打开并修改Word文档
- NHibernate – 使用ICriteria进行分页和可选的ICriteria调用
- ASP .Net MVC 4,密钥’attachdbfilename’的值无效
- entity framework在db.SaveChanges()期间创建新数据行
- 未处理的exception未被Global.asaxerror handling程序或自定义IHttpModuleerror handling程序捕获
- 创建只接受数字的WPF TextBox
- Request.Querystring自动url解码一个字符串?