使用指针字符串在运行时动态解析json属性

时间:2015-02-02 22:34:09

标签: c# json

说我有以下对象

{
"Dog": {
    "Puppies": [
        {
            "Name": "John"
        },
        {
            "Name": "Alex"
        },
        {
            "Name": "Ashley"
        }
    ]
}
}  

说我有以下字符串

var savePath = "[Dog][Puppies][1]";

如果我在C#dynamic中拥有上述JSON对象,那么在索引1处替换小狗最干净的方法是什么?

我不能简单地做dynamicDog.Dog.Puppies[1] = myNewPuppy,因为在我的情况下,我无法确定Puppies是否始终在该父节点中。在[Dog][Backpack][0][Puppies]中,它们可以更深入地嵌套。 savePath这里有我的小狗的直接位置,但是以字符串形式,因此需要一些如何在运行时解析此字符串。我考虑将JSON序列化为一个字符串,并尝试使用IndexOf和所有这些字符串操作方法来解决问题,但这似乎太毛茸茸了。 注意我在实际代码中并没有真正使用小狗或狗

更新以提供更多背景信息

我们有一个项目,它使用CouchDB中的JSON文档作为“模板”来动态生成Razor视图。作为输入的每个DOM元素都会添加一个属性savepath。这个savepath实际上就是构建此输入的JSON字符串中的路径。在我们的大多数代码中,我们有JS拦截表单提交,使用这些savepath创建一个新的JSON对象,只需将JSON字符串提交给控制器,该控制器在CouchDb中更新文档。在我的情况下,我有一个Puppies表,用户可以使用局部视图Popup添加额外的Puppy。此部分视图弹出窗口具有C#POCO作为视图模型(具有单个属性的单个Puppy:名称)。为了将小狗保存在JSON文档中的正确位置,我传递了提交中的savepath值。这里的主要问题是不同的Dog可能在不同的节点中有Puppies。它们可能更嵌套,可能更少嵌套。在我的控制器中,我从沙发中检索原始的Dog JSON文档,然后必须将新的Puppy添加到它。同样问题是Dog可以在第一个节点[Dog][Puppies][0]中拥有他,而另一个Dog可以拥有[Dog][Backpack][Puppies][0]除了{{1}之外没有别的方法可以告诉他们} string

0 个答案:

没有答案