如何获取元素键值?

时间:2019-12-24 02:52:43

标签: c# json

我遇到了一个问题,我在扫描QR码时需要帮助来检索某个键值,但是由于某种原因,我正在检索ID。但是,我想改为使用CandidateID。谁能帮我解决这个问题?提前致谢。

JSON:

   {
    "ef4b0f54-e246-468b-ada9-465777c6e743": {    
        "CandiateID": "d9c4ba35-6c68-41de-b11c-f4226701c05a", // I want to retrieve  this when I scan the QR code. 
         "ID": "ef4b0f54-e246-468b-ada9-465777c6e743" // I am getting only this when I scan the QR Code.     
    }
} 

2 个答案:

答案 0 :(得分:0)

您没有得到ID-您正在读取JSON的根值。这些值完全相同,因此看起来就像您在读取ID字段一样。

将JSON转换为动态对象时,可以使用属性索引器访问正确的值。

根据您的情况,您可以使用以下内容:

var results = JsonConvert.DeserializeObject<dynamic>(barCodeValue);

string id = results["ef4b0f54-e246-468b-ada9-465777c6e743"]["CandiateID"];

第一个值是JSON的根元素。

第二个值是JSON中的字段名称-CandiateID

本地变量id现在包含JSON中的CandiateID属性。

答案 1 :(得分:0)

您可以为此目的使用Linq。例如

var jObject = JObject.Parse(barCodeValue);
var candidateID = jObject.Descendants()
                         .OfType<JProperty>()
                         .Where(x=>x.Name=="CandiateID")
                         .First().Value;

如果要提取的CandidateID不止一个,则可以使用

var candidateIDs = jObject.Descendants()
                          .OfType<JProperty>()
                          .Where(x=>x.Name=="CandiateID")
                          .Select(x=>x.Value);