0

I really need some help with desereliazing a JSON.

Here is my JSON : https://min-api.cryptocompare.com/data/histoday?fsym=BTC&tsym=USD

Here is the code I have so far :

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;

public class StockManager : MonoBehaviour {

private string webString;

private CurrencyContainer container;

[SerializeField]private int currenciesToLoad;

void Start()
{
    StartCoroutine(GetText());
}

void Update()
{
    if (container != null) 
    {
        Debug.Log (container.Arr);
    } 
    else 
    {
        Debug.Log ("null");
    }
}

IEnumerator GetText()
{
    using (WWW www = new WWW("https://min-api.cryptocompare.com/data/histoday?fsym=BTC&tsym=USD"))
    {
        yield return www;

        if (www.error != null)
        {
            Debug.Log("Error is : " + www.error);
        }
        else
        {
            webString = "{ \"Arr\":" + www.text + "}";

                            container = JsonConvert.DeserializeObject<CurrencyContainer> (webString);

        }
    }       
}

[System.Serializable]
public class Datum
{
    public int time;
    public double close;
    public double high;
    public double low;
    public double open;
    public double volumefrom;
    public double volumeto;
}

[System.Serializable]
public class ConversionType
{
    public string type;
    public string conversionSymbol;
}

[System.Serializable]
public class Example
{
    public string Response;
    public int Type;
    public bool Aggregated;
    public IList<Datum> Data;
    public int TimeTo;
    public int TimeFrom;
    public bool FirstValueInArray;
    public ConversionType ConversionType;
}

[System.Serializable]
public class CurrencyContainer
{
    public Example[] Arr;
}

}

The error I get is : JsonSerializationException: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'StockManager+Example[]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.

I have no idea how to fix and any help is really appreciated. Thanks a lot.

1
  • 2
    Can you post your Json string? Commented Jan 31, 2018 at 9:31

1 Answer 1

1

You have "one level to much" in your object structure, as the given JSON is only on "item" of your type Example. Try the following:

var item = JsonConvert.DeserializeObject<Example>(www.text);

See it HERE in action.

Sign up to request clarification or add additional context in comments.

4 Comments

That will do it. This line webString = "{ \"Arr\":" + www.text + "}"; wasn't doing any good either.
Also, how would I go about printing each value in Data ? For example if I print data(0) i should get {"time":1514764800,"close":13444.88,"high":13921.53,"low":12877.67,"open":13850.49,"volumefrom":78425.21,"volumeto":1057521524.42} , data(1) should print : "time":1514851200,"close":14754.13,"high":15306.13,"low":12934.16,"open":13444.88,"volumefrom":137732.17,"volumeto":1956783037.35. Well, I know it doesn't work like that because Data is an array with only one element, but how could I achieve what I want? Thanks a lot again.
@weaverbeaver You can access them by item.Data[index], so e.g. item.Data[0]. (I updated the fiddle to dump data(0) and data(1))
Yeah, I was using item.Data(index) instead of item.Data[index]. Thanks a lot again !

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.