使用JsonPatchDocument将项目添加到JSON数组中



我正在尝试添加一个元素到JSON数组使用微软的JsonPatch实现在。net 6:

JSON input:
{ "foo": [ 1 ] }
Expected JSON output:
{ "foo": [ 1, 2 ] }
根据他们的文档,我得到了以下代码:
string input = @"{ ""foo"": [ 1 ] }";
dynamic obj = JsonSerializer.Deserialize<ExpandoObject>(input);
var patch = new JsonPatchDocument();
patch.Add("/foo/-", 2);
string output = JsonSerializer.Serialize(obj);
Console.WriteLine(output); // throws JsonPatchException, expected { "foo": [ 1, 2 ] }

我期望我的对象的foo属性包含一个等于[1, 2]的数组,但它失败了,出现以下错误:

Microsoft.AspNetCore.JsonPatch.Exceptions。JsonPatchException:没有找到路径段'-'指定的目标位置。

Replace操作foo属性更新ExpandoObject成功,Add操作失败。我错过了什么明显的东西吗?

我还尝试使用JsonNode代替ExpandoObject,但无济于事(JsonNode obj = JsonSerializer.Deserialize<JsonNode>(input);)。该代码抛出相同的错误。

在此期间,作为一个解决方案,我使用JsonPatch.Net。代码看起来很相似:

string input = @"{ ""foo"": [ 1 ] }";
JsonNode obj = JsonSerializer.Deserialize<JsonNode>(input);
var patch = new JsonPatch(PatchOperation.Add(JsonPointer.Parse("/foo/-"), 2));
PatchResult patchResult = patch.Apply(obj);
string output = JsonSerializer.Serialize(patchResult.Result);
Console.WriteLine(output); // { "foo": [ 1, 2 ] }

相关内容

  • 没有找到相关文章