如何在C#中处理JSON对象

16

我正在处理来自 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
  }
}

你能给我们展示一些你尝试过的代码吗?同时请把它添加到问题本身中。 - Maverick
你在使用解析器吗?JSON.net或其他的? - Wickramaranga
@Wickramaranga 是的,我正在使用JSON.NET。 - Hooman
哪里有映射到JSON对象的类?你可以在http://json2csharp.com/上在线转换。 - Miller
3个回答

31

获得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);

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


3
你提到的http://json2csharp.com/网站非常棒,可以节省手动编写大量代码的时间,特别是使用QuickType选项时。 - robnordon

4

首先按如下方式定义类:

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...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接