@val_gr
Студент, программирую на Python и C# (Xamarin)

Получаю null при попытке распарсить JSon, что не так?

Сервер присылает это
[
  {
    "nickname": "dagon", 
    "record": 10000
  }, 
  {
    "nickname": "vladdd183", 
    "record": 10000
  }, 
  {
    "nickname": "nick3", 
    "record": 10000
  }, 
  {
    "nickname": "Dagon", 
    "record": 18
  }, 
  {
    "nickname": "nick2", 
    "record": 10
  }, 
  {
    "nickname": "asdgasg", 
    "record": 1
  }, 
  {
    "nickname": "asdgas", 
    "record": 0
  }, 
  {
    "nickname": "", 
    "record": 0
  }, 
  {
    "nickname": "nick1", 
    "record": 0
  }, 
  {
    "nickname": "nick4", 
    "record": -10
  }
]


У меня есть класс JSonData
using System.Collections.Generic;
using UnityEngine;

public class JSonData : MonoBehaviour
{
    public static List<string[]> nickname { get; set; }
    public static List<string[]> record { get; set; }
}


и скрипт GetRecords
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class GetRecords : MonoBehaviour
{
    public string myJson;

    public GameObject Text;
    void Start()
    {
        StartCoroutine(GetRequest("url"));
        jsonParse();
        ShowData();
    }

    IEnumerator GetRequest(string uri)
    {
        UnityWebRequest uwr = UnityWebRequest.Get(uri);
        yield return uwr.SendWebRequest();

        if (uwr.isNetworkError)
        {
            Debug.Log("Error While Sending: " + uwr.error);
        }
        else
        {
            myJson = uwr.downloadHandler.text;
        }
    }

    void jsonParse()
    {
        var response = JsonConvert.DeserializeObject<JSonData>(myJson);
    }

    void ShowData()
    {
        Debug.Log(JSonData.nickname);
        Debug.Log(JSonData.record);
    }
}


В итоге в консоли я получаю два Null. Почему так происходит? Почему я не получаю два списка заполненные значениями?

Вообще в итоге я хочу добиться такого вывода:

dagon 10000
vladdd183 10000
nick3 1000
и.т.д

Именно для этого мне нужны два списка заполненные только значениями.
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Senior .NET developer
Листы в общем-то плохо серилизуются. По структуре у вас массив объектов, но распаковать их вы хотите в какой-то странный контейнер. Возможно так нужно, но это сделаете сами.

Выбросил все лишнее, думаю код стал понятней

using Newtonsoft.Json;
using System.Diagnostics;
using System.IO;

namespace ConsoleApp1
{
    public class NickNamePair
    {
        [JsonProperty("nickname")]
        public string NickName { get; set; }
        [JsonProperty("record")]
        public int Record { get; set; }

        public override string ToString()
        {
            return $"{NickName} {Record}";
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            using var stream = new StreamReader("data.json");
            var myJson = stream.ReadToEnd();
            var realresp = JsonConvert.DeserializeObject<NickNamePair[]>(myJson);
            foreach (var item in realresp)
                Debug.WriteLine(item);
        }
    }

}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы