не уверен, что это ваша проблема точно, если я ошибаюсь, мой плохой, вы можете создавать эти объекты пользовательских JSon в C# с использованием System.Dynamic.ExpandoObject или с использованием IDictionary, или оба, как в моем примере (случай я ленивый), , как в комментариях, как говорится, это больше похоже на разборе, а не преобразование:
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
namespace ExpandoObject
{
class Program
{
static void Main(string[] args)
{
string stringObj;
stringObj = "{\"op\": \"add\", \"path\": \"https://stackoverflow.com/a/b\", \"value\": \"foo\"}";
Console.WriteLine(JsonConvert.SerializeObject(GetObjectPatchResult(stringObj)));
stringObj = "{\"op\": \"add\", \"path\": \"https://stackoverflow.com/a/b/c/d/e/f/g/h/i/j\", \"value\": \"foo\"}";
Console.WriteLine(JsonConvert.SerializeObject(GetObjectPatchResult(stringObj)));
}
private static object GetObjectPatchResult(string param)
{
dynamic expando = new System.Dynamic.ExpandoObject();
var result = (IDictionary<string, object>)expando;
var parchObject = JsonConvert.DeserializeObject<PatchObject>(param);
var level = result;
int i = 0;
foreach (var path in parchObject.Path.Split('/'))
{
i++;
if (string.IsNullOrEmpty(path)) continue;
dynamic pathExpando = new System.Dynamic.ExpandoObject();
level[path] = (IDictionary<string, object>)pathExpando;
if (i < parchObject.Path.Split('/').Count())
{
level = (IDictionary<string, object>)level[path];
}
else
{
level[path] = parchObject.Value;
}
}
return result;
}
}
public class PatchObject
{
public string Op { get; set; }
public string Path { get; set; }
public string Value { get; set; }
}
}
результат:
{ "а": { "Ъ": "Foo"}}
{ "а": { "Ъ": { "с": { "d": { "е": {"f": {"g": {"h": {"i": {"j": "foo"}}}}}}}}}}
Нажмите любую клавишу, чтобы продолжить. , ,
Сомневаюсь, что существует какой-либо особый способ сделать это. Вам, вероятно, придется разобрать оба jsons на объекты и применить преобразования вручную. –
ну, есть такие библиотеки, как JsonDiffPatch, но он генерирует исключение, когда часть пути отсутствует. – Serhiy
Возможно, есть некоторые настройки, которые заставляют JsonDiffPatch создавать отсутствующие узлы? –