Как десериализовать объект Json с помощью приложения для Android - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь десериализовать объект JSon с помощью приложения Anroid, но не могу запустить его.Намерение состоит в том, чтобы прочитать данные из элемента актива («AllPoloniexPairs.txt»), который является объектом JSON, который я пытаюсь десериализировать и получить «currencyPairs» из части «Данные», и поместить его в счетчик.

Ниже (часть) мой JSON

    {"BTC_BCN":{"id":7,"baseID":28,"quoteID":17,"base":"BTC","quote":"BCN","currencyPair":"BTC_BCN"},"BTC_BTS":{"id":14,"baseID":28,"quoteID":32,"base":"BTC","quote":"BTS","currencyPair":"BTC_BTS"}}

Это мой код

    public class Data
    {
        public int id { get; set; }
        public int baseID { get; set; }
        public int quoteID { get; set; }
        public string Base { get; set; }
        public string Quote { get; set; }
        public string currencyPair { get; set; }
    }

    public class Pairs
    {
        public string id { get; set; }
        public Data data { get; set; }
    }

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        using (StreamReader sr = new StreamReader(assets.Open("AllPoloniexPairs.txt")))
        {
            content = sr.ReadToEnd();
        }

        Pairs pairs = JsonConvert.DeserializeObject<Pairs>(content);

        ArrayAdapter<String> adapter;
        Spinner spinner2 = (Spinner)FindViewById(Resource.Id.spinner2);
        List<string> spinnerItems = new List<string>();

        foreach (var k in pairs.data.currencyPair)
        {
            spinnerItems.Add(k.ToString());
        }

        spinnerItems.Sort();
        adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerDropDownItem, spinnerItems);
        spinner2.Adapter = adapter;
     }

Когда я пропускаю цикл foreach, приложение запускается, но, конечно, св блесне нет предметов.Если я включу часть foreach, приложение зависнет.

Я пробовал несколько вещей за последние пару часов, но безуспешно.

В чем может быть причина того, что код не работает?не бежите?

1 Ответ

0 голосов
/ 09 февраля 2019

Хорошо, почему вы заново изобретаете колесо, Google уже сделал это для вас, вы можете сделать это в двух строках кода:

https://github.com/google/gson

Gson gson = new Gson();
MyClass myClass= gson.fromJson(json, MyClass.class);

Извините за задержку с вычислением ваших данных json, и мне и GSON кажется неправильным, что вам лучше использовать что-то вроде:

[
{
    "id": 7,
    "baseID": 28,
    "quoteID": 17,
    "base": "BTC",
    "quote": "BCN",
    "currencyPair": "BTC_BCN"
},
 {
    "id": 14,
    "baseID": 28,
    "quoteID": 32,
    "base": "BTC",
    "quote": "BTS",
    "currencyPair": "BTC_BTS"
}
]

Вы использовали объект, в котором есть два объекта.Это не массив, помните, что массив должен иметь скобки.Теперь давайте сделаем это с вышеприведенным json, у нас есть класс MyClass, скажем:

public class MyClass {
    int id;
    int baseID;
    int quoteID;
    String base;
    String quote;
    String currencyPair;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getBaseID() {
        return baseID;
    }

    public void setBaseID(int baseID) {
        this.baseID = baseID;
    }

    public int getQuoteID() {
        return quoteID;
    }

    public void setQuoteID(int quoteID) {
        this.quoteID = quoteID;
    }

    public MyClass(String currencyPair) {
        this.currencyPair = currencyPair;
    }

    public String getBase() {

        return base;
    }

    public void setBase(String base) {
        this.base = base;
    }

    public String getQuote() {
        return quote;
    }

    public void setQuote(String quote) {
        this.quote = quote;
    }

}

Теперь в вашей деятельности используйте:

Gson gson = new Gson();
String jsonOutput = "[{\"id\":7,\"baseID\":28,\"quoteID\":17,\"base\":\"BTC\",\"quote\":\"BCN\",\"currencyPair\":\"BTC_BCN\"},{\"id\":14,\"baseID\":28,\"quoteID\":32,\"base\":\"BTC\",\"quote\":\"BTS\",\"currencyPair\":\"BTC_BTS\"}]";
MyClass[] posts = gson.fromJson(jsonOutput, MyClass[].class);
Log.v("SteveMoretz", String.valueOf(posts.length));

Вы получите 2 по журналу, что означаеттеперь у вас есть два объекта, которые вы можете использовать там, где захотите.

...