如何在C#中访问JSON中值为值的名称 [英] How to access a Name that is value in JSON in C#

查看:87
本文介绍了如何在C#中访问JSON中值为值的名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前我有这个:

{
  "example" :{
    "001":{
      "ID":"001",
      "Name":"Test1"  
    },
    "002":{
      "ID": "002",
      "Name": "test2"
    }
  }
}

我正在尝试访问该名称,但是到目前为止,我有以下代码:

I am trying to access the Name,but so far I have this code:

   DataRow x = dtNew.NewRow();
   Newtonsoft.Json.Linq.JObject obj =  Newtonsoft.Json.Linq.JObject.Parse(testing);
   x["Name"] = jobj2["example"]["????"]["Name"].ToString();

["001"]部分取决于ID

推荐答案

您需要了解的第一件事是您的JSON无效. 您可以使用 JSONLint 来检查JSON是否有效. JSON应该是对象数组.

The first thing you need to understand is that your JSON is invalid. You can use JSONLint to check if your JSON is valid. JSON should be an object or an array.

有效的JSON对象将是:

The valid JSON object will be:

{
    "example": {
        "001": {
            "ID": "001",
            "Name": "Test1"
        },
        "002": {
            "ID": "002",
            "Name": "test2"
        }
    }
}

这些更改之后对我有用:

After these changes this works for me:

DataRow x = dtNew.NewRow();
var obj = Newtonsoft.Json.Linq.JObject.Parse(testing);
x["Name"] = jobj2["example"]["001"]["Name"].ToString();

更新1 :OP已修复其JSON对象,问题已更改.

Update 1: The OP has fixed his JSON object, the question has changed.

实际上,这是另一个问题.如何使用动态子对象名称解析JSON对象.

Actually, it is an another question. How to parse JSON object with dynamic sub-object name.

有几种方法可以做到这一点.我建议以这种方式声明类并以Dictionary的形式解析此JSON对象:

There are several ways to do this. I would recommend to declare classes and parse this JSON object as a Dictionary this way:

public class Response
{
    public Dictionary<string, ExampleObj> example { get; set; }
}

public class ExampleObj {
    public string ID { get; set; }
    public string Name { get; set; }
}

// Somewhere in code

string jsonString = "{\"example\" :{ \"001\":{ \"ID\":\"001\", \"Name\":\"Test1\" }, \"002\":{ \"ID\": \"002\", \"Name\": \"test2\" }}}";

var obj = JsonConvert.DeserializeObject<Response>(jsonString);

foreach (var keyValuePair in obj.example)
{
    Console.WriteLine("That's a {0}", keyValuePair.Key);
    Console.WriteLine("It's name is {0}", keyValuePair.Value.Name);
}

JsonConvert将识别此动态名称"????" (例如'001')作为动态Dictionary键-它的内容将被序列化为ExampleObj类的Dictionary值.

JsonConvert will recognize this dynamic name "????" (for example, '001') as a dynamic Dictionary key - and it's content will be serialized to a Dictionary value of ExampleObj class.

这是一个有效的 DotNetFiddle演示.

这篇关于如何在C#中访问JSON中值为值的名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆