0

空の is JSON オブジェクトがあるとしましょう:

String obj1 = "{}";

パッチを適用して C# を使用して不足しているパスを強制的に作成する方法はありますか? したがって、パッチ後は次のようになります。

{ "op": "add", "path": "/a/b", "value": "foo" },

結果は次のようになります。{ a: { b: "foo" } }

4

1 に答える 1

0

あなたの問題が正確にわからない場合、私の悪いところが間違っている場合は、System.Dynamic.ExpandoObject または IDictionary を使用して C# でこれらのカスタム json オブジェクトを作成できます。コメントでは、これは変換ではなく解析に似ています。

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\": \"/a/b\", \"value\": \"foo\"}";
            Console.WriteLine(JsonConvert.SerializeObject(GetObjectPatchResult(stringObj)));
            stringObj = "{\"op\": \"add\", \"path\": \"/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; }
    }
}

結果:

{"a":{"b":"foo"}}

{"a":{"b":{"c":{"d":{"e":{"f":{"g":{"h":{"i":{"j": "foo"}}}}}}}}}}

何かキーを押すと続行します 。. .

于 2016-02-23T14:16:35.727 に答える