【问题标题】:how to work with json object in c#如何在 C# 中使用 json 对象
【发布时间】:2016-12-30 02:20:42
【问题描述】:

我正在使用来自 API 的 json,这就是我所说的:

{
  "popularity": 3.518962,
  "production_companies": [
    {
      "name": "value1",
      "id": 4
    },
    {
      "name": "value2",
      "id": 562
    },
    {
      "name": "value13",
      "id": 14654
    },
    {
      "name": "value4",
      "id": 19177
    },
    {
      "name": "value5",
      "id": 23243
    }
  ]
}

我已经可以返回popularity的值了

例如,我需要知道如何访问name 的值以及它是哪个name

我也尝试将其转换为数组,但没有成功或我做错了什么。

电影类:

public class Movie {

    public string popularity {get; set;}
    public object production_companies {get; set;}

    public Movie GetBasic(string id) {
        string json = @"{
                      "popularity": 3.518962,
                      "production_companies": [
                        {
                          "name": "value1",
                          "id": 4
                        },
                        {
                          "name": "value2",
                          "id": 562
                        },
                        {
                          "name": "value13",
                          "id": 14654
                        },
                        {
                          "name": "value4",
                          "id": 19177
                        },
                        {
                          "name": "value5",
                          "id": 23243
                        }
                      ]
                    }";

        Movie Data = JsonConvert.DeserializeObject<Movie>(json);

        return Data;

}

到目前为止我做了什么:

@{
  var arr = Item.production_companies.ToString().Substring(1, (Item.production_companies.ToString().Length - 2)).ToArray();
  foreach(var a in arr) {
    @a.name
  }
}

【问题讨论】:

  • 你能告诉我们一些你试过的代码吗?也请在问题本身中添加。
  • 你在使用解析器吗? JSON.net 之类的?
  • @Wickramaranga 是的,我正在使用 JSON.NET
  • 映射到 json 对象的类在哪里?您可以在json2csharp.com 在线转换。

标签: c# json object indexing key-value


【解决方案1】:

首先定义类如下:

public class ProductionCompany
{
    public string name { get; set; }
    public int id { get; set; }
}

public class Item
{
    public double popularity { get; set; }
    public List<ProductionCompany> production_companies { get; set; }
}

然后您可以使用 jsonSerializer 将您的 JSON 转换为类对象

    string jsonInput="your Json string"; 

    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
    Item item= jsonSerializer.Deserialize<Item>(jsonInput)

现在你的数据可以很容易地从对象项中检索出来,像这样

  foreach (var productioncompany in item.Production_Companies)
    {
       productioncompany.Name;  
       productioncompany.id;
    }

【讨论】:

    【解决方案2】:

    最简单的方法是创建一个与您的 JSON 匹配的类,反序列化 JSON,然后通过创建的对象访问属性。

    例如:

    public class Companies(){
      public double Popularity { get; set; }
      public List<ProductionCompany> Production_Companies { get;set; }
    
      public Companies(){
        Production_Companies  = new List<ProductionCompany>();
      }
    }
    
    public class ProductionCompany(){
       public string Name {get;set;}
       public int Id {get;set;}
    }
    

    然后你用 JSON.Net 反序列化

      var myObject = JsonConvert.DeserializeObject<Companies>(jsonString);
    

    并访问属性

    foreach (var company in myObject.Production_Companies)
    {
       company.Name;  //do something...
    }
    

    【讨论】:

      【解决方案3】:

      在你得到一个 json 字符串后,你需要反序列化它。 使用此站点为您生成模型

      http://json2csharp.com/

      你会得到一些类似的课程

      public class ProductionCompany
      {
          public string name { get; set; }
          public int id { get; set; }
      }
      
      public class RootObject
      {
          public double popularity { get; set; }
          public List<ProductionCompany> production_companies { get; set; }
      }
      

      那你就可以打电话了

      var json = "...yout json string..."
      RootObject obj = JsonConvert.DeserializeObject<RootObject >(json);
      

      您可以轻松使用检索到的数据

      【讨论】:

      • 您提到的网站json2csharp.com 很棒,并且可以节省手动编写大量代码,尤其是在使用 QuickType 选项时。
      猜你喜欢
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      相关资源
      最近更新 更多