Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于父名称获取JToken的路径_C#_Json.net - Fatal编程技术网

C# 基于父名称获取JToken的路径

C# 基于父名称获取JToken的路径,c#,json.net,C#,Json.net,我有一个重复多次的Json文件: "flows": [ { "network1": { "downlinkUnit": "u1Kbps", "downlinkValue": 2, "uplinkUnit": "u1Kbps",

我有一个重复多次的Json文件:

"flows": [
          {
            "network1": {
              "downlinkUnit": "u1Kbps",
              "downlinkValue": 2,
              "uplinkUnit": "u1Kbps",
              "uplinkValue": 10
            },
            "network2": {
              "downlinkUnit": "u2Kbps",
              "downlinkValue": 8,
              "uplinkUnit": "u4Kbps",
              "uplinkValue": 12
            },
           }
          ]
我正试图根据父级的值访问2个不同的
下行链路单元
属性。 我想我离它很近了,但我错过了一些东西:

            var paramPath = jObject.Descendants()
                                   .OfType<JProperty>()
                                   .Where(p => p.Name.Contains("downlinkUnit") && p.Parent.Contains("network1"))
                                   .First()
                                   .Path;

            var token = jObject.SelectToken(paramPath);
            token.Replace(JToken.FromObject(item.Value));
            Console.WriteLine(paramPath);
var paramPath=jObject.subjects()
第()类
其中(p=>p.Name.Contains(“下行链路单元”)和&p.Parent.Contains(“网络1”))
.First()
路径
var token=jObject.SelectToken(paramPath);
替换(JToken.FromObject(item.Value));
Console.WriteLine(paramPath);

如果我删除
和&p.Parent.Contains(“network1”)
,代码工作正常,我可以访问
下行链路单元的路径。但是,我确实需要检查父级的东西。我在这里遗漏了什么?

您可以分析父级的
Path
属性:

var paramPath = jObject.Descendants()
    .OfType<JProperty>()
    .Where(p => p.Name.Contains("downlinkUnit") && p.Parent.Path.EndsWith(".network1"))
    .First()
    .Path;

您可以分析父级的
Path
属性:

var paramPath = jObject.Descendants()
    .OfType<JProperty>()
    .Where(p => p.Name.Contains("downlinkUnit") && p.Parent.Path.EndsWith(".network1"))
    .First()
    .Path;

你所说的“基于父母拥有的价值”是什么意思?你想如何“检查”父项(具体应该检查什么)?@GuruStron按父项的值,我指的是它的名称。我想访问network1或network2下的下行链路单元路径,具体取决于父对象的值您在说什么“值”?你的Json是动态的吗?应该只处理“网络1”和“网络2”吗?有可能有“网络3”吗?或者你担心在另一个完全不同的json对象中会出现其他“downlinkUnit”属性?@GuruStron我在这个json文件中有很多同名的参数,所以我访问它们时会给出一个字符串(比如:“downlinkUnit\u network1”)并将其拆分为“downlinkUnit”和“network1”,这样我就可以准确地知道它们在JSON文件中的位置,否则我就无法访问我想要的“下行链路单元”。你所说的“基于父级拥有的值”是什么意思?你想如何“检查”父项(具体应该检查什么)?@GuruStron按父项的值,我指的是它的名称。我想访问network1或network2下的下行链路单元路径,具体取决于父对象的值您在说什么“值”?你的Json是动态的吗?应该只处理“网络1”和“网络2”吗?有可能有“网络3”吗?或者你担心在另一个完全不同的json对象中会出现其他“downlinkUnit”属性?@GuruStron我在这个json文件中有很多同名的参数,所以我访问它们时会给出一个字符串(比如:“downlinkUnit\u network1”)并将其拆分为“downlinkUnit”和“network1”,这样我就可以准确地知道它们在JSON文件中的位置,否则我就无法访问我想要的“下行链路单元”。太好了!多谢各位!“.EndsWith()”是唯一缺少的东西。@DavideGanna很乐意帮忙!顺便说一句,您只需替换
JProperty
的值,而无需额外的路径处理:
var paramPath=jObject….First();paramPath.Value.Replace(JToken.FromObject(item.Value))完美!多谢各位!“.EndsWith()”是唯一缺少的东西。@DavideGanna很乐意帮忙!顺便说一句,您只需替换
JProperty
的值,而无需额外的路径处理:
var paramPath=jObject….First();paramPath.Value.Replace(JToken.FromObject(item.Value))