说我有以下对象
{
"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