#c# #json #generic-list
Вопрос:
Я пытаюсь составить список всех элементов в игре using System.Text.Json;
, я очень новичок в использовании файлов .json. Я пытался сделать это, чтобы проверить, работает ли это:
List<Item> AllItems = new List<Item>();
string json = File.ReadAllText("Items.json");
AllItems = Deserialize<List<Item>>(json);
WriteLine(AllItems[0].Name);
Это не позволяет мне преобразовать его в список
Это файл json
{
"Item": [
{
"Weapon": [
{
"CritChance": 60,
"HitChance": 80,
"OGDamge": 15,
"Damage": 15,
"Damage_Type": "Physical",
"Weapon_Type": "Fist",
"Player": null,
"APUsage": 4,
"ID": 1,
"Name": "Debug",
"Value": 16,
"Rarity": "Common",
"Item_Type": "Weapon"
},
{
"CritChance": 40,
"HitChance": 70,
"OGDamge": 15,
"Damage": 15,
"Damage_Type": "Electric",
"Weapon_Type": "Bow",
"Player": null,
"APUsage": 5,
"ID": 2,
"Name": "Debug2",
"Value": 15,
"Rarity": "Common",
"Item_Type": "Weapon"
}
]
}
]
}
Может ли кто-нибудь мне помочь 🙂
Комментарии:
1. Вам нужно будет создать классы, представляющие эту структуру json. Проверьте QuickType ; у вас должен быть, по крайней мере
Item
,Weapon
класс and. Вам также придется решить, какой типPlayer
будет учитывать этоnull
.2. Ваш список<Элемент> должен быть классом со свойством «Элемент», которое является списком<Элемент><Элемент>
3. @zaggler как именно я бы это сделал, лол, я не настолько продвинут на самом деле
4. @PrinceJKB пожалуйста, посмотрите ссылку, которую я разместил, возьмите свой json и вставьте его в редактор, он создаст для вас необходимые классы на основе этой структуры.
5. @zaggler должен ли я вставить это в visual studio или файл json
Ответ №1:
Ваш файл json начинается с фигурных скобок, что означает, что вам нужен родительский класс, содержащий список элементов с именем Item, Или вы просто меняете свой файл json, начинается с [ скобка, которая означает, что ваш основной объект-коллекция.
Ответ №2:
В приведенном ниже коде используется не файл, который вы используете, а строка (почти) с тем же содержимым. Вам необходимо объявить классы для каждого элемента в вашем Json, прежде чем вы сможете десериализоваться с помощью в данном случае NewtonSoft.
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
namespace JsonDeserialize
{
class Program
{
static void Main(string[] args)
{
var json = @"
{
'Items': [
{
'Weapons': [
{
'CritChance': 60,
'HitChance': 80,
'OGDamge': 15,
'Damage': 15,
'Damage_Type': 'Physical',
'Weapon_Type': 'Fist',
'Player': null,
'APUsage': 4,
'ID': 1,
'Name': 'Debug',
'Value': 16,
'Rarity': 'Common',
'Item_Type': 'Weapon'
},
{
'CritChance': 40,
'HitChance': 70,
'OGDamge': 15,
'Damage': 15,
'Damage_Type': 'Electric',
'Weapon_Type': 'Bow',
'Player': null,
'APUsage': 5,
'ID': 2,
'Name': 'Debug2',
'Value': 15,
'Rarity': 'Common',
'Item_Type': 'Weapon'
}
]
}
]
}";
var allItems = JsonConvert.DeserializeObject<AllItems>(json);
Console.WriteLine(allItems.Items[0].Weapons[0].Name);
Console.ReadKey();
}
}
public class AllItems
{
public List<Item> Items { get; set; }
}
public class Item
{
public List<Weapon> Weapons { get; set; }
}
public class Weapon
{
public int CritChance { get; set; }
public int HitChance { get; set; }
public int OGDamge { get; set; }
public int Damage { get; set; }
public string Damage_Type { get; set; }
public string Weapon_Type { get; set; }
public string Player { get; set; }
public int APUsage { get; set; }
public string ID { get; set; }
public string Name { get; set; }
public int Value { get; set; }
public string Rarity { get; set; }
public string Item_Type { get; set; }
}
}
Что всегда помогает мне в этих случаях, так это использование ключевого слова «динамический», например:
dynamic allItems = JsonConvert.DeserializeObject<dynamic>(json);
Вы можете увидеть, что десериализуется с помощью «локальных»
Комментарии:
1. я все еще понятия не имею, что делать, лол, у меня есть класс предметов, а оружие-производный от него класс
2. Видите ли вы иерархию, которая находится в классах. Класс Allitems содержит список элементов. На предметах есть список оружия. Это именно то, о чем вы заявили в своем Json. Попробуйте прочитать код. Какую часть кода вы не понимаете? Не говори просто, что я не понимаю. Скажи нам, чего ты не понимаешь.