MRE('导致许可问题) 我在 C# 中有一个动态对象(它主要用于反序列化 json 字符串):
dynamic jsonObj = JsonConvert.Deserialize(<theJsonString>);
dynamic confKeys = <DeserializedObject>
confKeys
对象中的键位于它们的完整访问路径中。因此,对于 {["keyOuter":{"keyInner":"valueInner"}]}
类型的键,confKeys
将字符串“jsonObj[0].keyOuter.keyInner”作为键。configuration[0].name as a variable being accessed = configuration[0].value as another variable being accessed
.
MRE 配置文件的结构(外部的,即保存键及其要插入的值的那个):
{[
"jsonObj[0].keyOuter.keyInner": "someValue",
"jsonObj[2].keyLaLa": "someValueLaLa"
]}
本质上,我的配置文件包含指向另一个 json 文件对象键的指针...
PS:有什么办法可以取消对用户将最外面的对象称为
jsonObj
的限制吗?
编辑:尽我所能澄清:
之前:
示例 json 文件:
{
"someOuterKey.someInnerKey.someEvenMoreInnerKey": "someValue"
}
另一个相关的示例 json 文件:
{
"someOuterKey": {
"someInnerKey": {
"someEvenMoreInnerKey": "someCurrentValue"
}
}
}
之后:
示例 json 文件:
{
"someOuterKey.someInnerKey.someEvenMoreInnerKey": "someValue"
}
另一个相关的示例 json 文件:
{
"someOuterKey": {
"someInnerKey": {
"someEvenMoreInnerKey": "someValue"
}
}
}
目前已经能够反序列化这两个 json(使用
dynamic objects
)但是找不到将 json1 中的键转换为访问 json2 的变量的方法。
AFAIK 动态反序列化内部使用了
JToken
的,因此您可以直接使用它们。例如通过 SelectToken(s)
: 使用 JSON 路径语法
var js1 = """
{
"someOuterKey.someInnerKey.someEvenMoreInnerKey": "someValue"
}
""";
var js2 = """
{
"someOuterKey": {
"someInnerKey": {
"someEvenMoreInnerKey": "someCurrentValue"
}
}
}
""";
var o1 = JsonConvert.DeserializeObject<JObject>(js1);
var o2 = JsonConvert.DeserializeObject<JObject>(js2);
foreach (var kvp in o1)
{
var value = kvp.Value.Value<string>();
var selectToken = o2.SelectToken(kvp.Key);
if (selectToken is not null)
{
selectToken.Replace(kvp.Value);
}
}
var serializeObject = JsonConvert.SerializeObject(o2); // {"someOuterKey":{"someInnerKey":{"someEvenMoreInnerKey":"someValue"}}}