web-dev-qa-db-ja.com

c#でjsonオブジェクトを操作する方法

私は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
  }
}
8
Hooman

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

取得したデータを簡単に使用できます

18
Grappachu

最初に以下のようにクラスを定義します。

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;
    }
3
Maverick

これを行う最も簡単な方法は、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...
}
0
Bojan B