0

したがって、defindex を使用して json ファイル内のアイテムを検索し、アイテム名を返そうとしていますが、エラーが発生します。検索しましたが、関連するものは何もありませんでした。

            var json = File.ReadAllText(dota2schemaFilePath);
            var dota2schema = JsonConvert.DeserializeObject<schema>(json);

            foreach (Item item in Items)     //ERROR HERE
            {
                if (item.Defindex == 4793)
                    itemname = item.Name;

エラー 2 非静的フィールド、メソッド、またはプロパティ 'schemaexample.schema.Items.get' にはオブジェクト参照が必要です

参考にしたいそうです。アイテムを簡単に検索するにはどうすればよいですか?

ここに私の完全なコードがあります:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.IO;
using System.Threading;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;

namespace schemaexample
{

    public class schema
    {
        [JsonProperty("items")]
        public Item[] Items { get; set; }

        [JsonProperty("items_game_url")]
        public string ItemsGameUrl { get; set; }

        [JsonProperty("status")]
        public int Status { get; set; }

        public class Item
        {
            [JsonProperty("name")]
            public string Name { get; set; }

            [JsonProperty("defindex")]
            public int Defindex { get; set; }

            [JsonProperty("item_class")]
            public string ItemClass { get; set; }

            [JsonProperty("item_type_name")]
            public string ItemTypeName { get; set; }

            [JsonProperty("item_name")]
            public string ItemName { get; set; }

            [JsonProperty("proper_name")]
            public bool ProperName { get; set; }

            [JsonProperty("item_quality")]
            public int ItemQuality { get; set; }

            [JsonProperty("image_inventory")]
            public string ImageInventory { get; set; }

            [JsonProperty("min_ilevel")]
            public int MinIlevel { get; set; }

            [JsonProperty("max_ilevel")]
            public int MaxIlevel { get; set; }

            [JsonProperty("image_url")]
            public string ImageUrl { get; set; }

            [JsonProperty("image_url_large")]
            public string ImageUrlLarge { get; set; }

            [JsonProperty("item_description")]
            public string ItemDescription { get; set; }

            [JsonProperty("attributes")]
            public Attribute[] Attributes { get; set; }

            [JsonProperty("item_set")]
            public string ItemSet { get; set; }
        }

        public static void Main(string[] args)
        {
            string dota2schemaFilePath = @"C:\Users\Andrew\Documents\GitHub\SteamBot\Bin\Debug\dota2schema.txt";
            string itemname = "not set";

            var json = File.ReadAllText(dota2schemaFilePath);
            var dota2schema = JsonConvert.DeserializeObject<schema>(json);

            foreach (Item item in Items)     //ERROR HERE
            {
                if (item.Defindex == 4793)
                    itemname = item.Name;
            }
            Console.WriteLine(itemname);

            Console.WriteLine("Press any key to exit");
            Console.ReadKey();


        }

        protected class schemaresult
        {
            public schema result { get; set; }
        }

    }
}

あなたがそれを必要とするなら、私が読んでいるjsonはここにあります: http://www50.zippyshare.com/v/13310944/file.html

4

1 に答える 1

0

ネイティブの JavaScriptSerializer を使用して、JSON ファイルを検索できました。

結果のオブジェクトを次のように変更しました

public class schemaresult
{
    public schema result { get; set; }
}

public class schema
{
    public Item[] Items { get; set; }
    public string ItemsGameUrl { get; set; }
    public int Status { get; set; }
}

public class Item
{
    public string Name { get; set; }
    public int Defindex { get; set; }
    public string ItemClass { get; set; }
    public string ItemTypeName { get; set; }
    public string ItemName { get; set; }
    public bool ProperName { get; set; }
    public int ItemQuality { get; set; }
    public string ImageInventory { get; set; }
    public int MinIlevel { get; set; }
    public int MaxIlevel { get; set; }
    public string ImageUrl { get; set; }
    public string ImageUrlLarge { get; set; }
    public string ItemDescription { get; set; }
    public Attribute[] Attributes { get; set; }
    public string ItemSet { get; set; }
}
public class Attribute {
    public string name { get; set; }
    public string @class { get; set; }
    public string value { get; set; }
}

そして、変換コードを次のように変更しました

var json = File.ReadAllText(dota2schemaFilePath);
        System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        serializer.MaxJsonLength = Int32.MaxValue;
        var schema_result = serializer.Deserialize<schemaresult>(json);

        foreach (Item item in schema_result.result.Items )      
        {
            if (item.Defindex == 4793)
            {
                itemname = item.Name;
                break;
            }
        };
于 2013-08-31T13:21:54.453 に答える