2013-04-06 3 views
2

Я разрабатываю приложение в C#, которое получает значение рюкзака игроков в игре под названием TF2 с использованием api Backpack.tf.Parsing Json in C# с JSON.NET

На данный момент код:

(MAIN CLASS) 
    JsonConvert.DeserializeObject<Json1>(json); 
    (END OF MAIN CLASS) 

public class Json1 { 
    public static List<Json2> response { get; set; } 
} 
public class Json2 
{ 
    public static int success { get; set; } 
    public static int current_time { get; set; } 
    public static IEnumerable<Json4> players { get; set; } 
} 
public class Json4 { 
    public static int steamid { get; set; } 
    public static int success { get; set; } 
    public static double backpack_value { get; set; } 
    public static string name { get; set; } 
} 

Я вырезать все остальное дерьмо из основного класса и т.д., но достаточно сказать, что да у меня есть код JSon в JSON строка готова для десериализации (протестирована с помощью Console.Writeline)

Проблема есть. Всякий раз, когда я использую такие вещи, как Json4.name (при записи на консоль) , он всегда возвращает 0.

Извините, если я совершил тупую ошибку, но я думаю, что я пробовал такие вещи, как удаление статических, изменение типов переменных и т. Д. Я до сих пор не могу заставить его работать. Обратите внимание, что это мой первый attemopt при десериализации Json-кода, и я сам написал классы, потому что некоторая причина http://json2csharp.com/ не сработала. Херес Я Json пытаюсь десериализации:

{ 
    "response":{ 
     "success":1, 
     "current_time":1365261392, 
     "players":{ 
     "0":{ 
      "steamid":"76561198045802942", 
      "success":1, 
      "backpack_value":12893.93, 
      "backpack_update":1365261284, 
      "name":"Brad Pitt", 
      "stats_tf_reputation":2257, 
      "stats_tf_supporter":1, 
      "notifications":0 
     }, 
     "1":{ 
      "steamid":"76561197960435530", 
      "success":1, 
      "backpack_value":4544.56, 
      "backpack_update":1365254794, 
      "name":"Robin", 
      "notifications":0 
     } 
     } 
    } 
} 

(форматирование перепутались немного Также, пожалуйста, простите некоторые орфографические ошибки :).)

+1

Все ваши поля 'статические'. Они действительно должны быть нестационарными. –

ответ

3

У вас есть несколько проблем с кодом:

а) Все ваши поля статичны. Удалить статичность; вам нужно, чтобы они были членами экземпляра.

b) Свойство ответа в Json1 должно быть всего лишь одним экземпляром, а не списком.

c) Игроки должны быть словарем (или нестандартным), а не IEnumerable, поскольку он не является массивом в JSON.

d) StreamId имеет действительно большие числа, которые не будут вписываться в int; измените это на длинный (или строку).

public class Json1 
{ 
    public Json2 response { get; set; } 
} 

public class Json2 
{ 
    public int success { get; set; } 
    public int current_time { get; set; } 
    public IDictionary<int, Json4> players { get; set; } 
} 

public class Json4 
{ 
    public long steamid { get; set; } 
    public int success { get; set; } 
    public double backpack_value { get; set; } 
    public string name { get; set; } 
} 
+0

Спасибо за это, но я никогда раньше не использовал тип IDictionary. Как я могу выводить информацию внутри нее? Спасибо за ответ еще раз. – LeCoffee

+1

IDictionary is IEnumerable >, поэтому вы можете использовать один и тот же цикл, как и у вас (как я предполагаю), и индексы доступа (int) с помощью значений a.Key и доступа (Json4) на a.Value. – outcoldman

+0

: D Я, наконец, получил все от работы, так большое спасибо! – LeCoffee