我正在尝试添加一个元素到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 ] }