Невозможно десериализовать объект JSON в формах Xamarin с помощью JSON.net - PullRequest
0 голосов
/ 23 июня 2018

У меня проблемы с десериализацией JSON, полученного из вызова API в моем проекте Android.Тем не менее, когда я ссылаюсь на общую библиотеку (стратегия .NET Standard) в проекте модульного тестирования и тестирую код - все работает, и моя модель заполняется правильно.Использование [Preserve (AllMembers = true)] не помогает.

Это мои модели:

public class StockQuotesResultDto
{
    [JsonProperty("Meta Data")]
    public MetaData MetaData { get; set; }

    [JsonProperty("Stock Quotes")]
    public StockQuoteDto[] StockQuotes { get; set; }
}

//[Preserve(AllMembers = true)]
public class MetaData
{
    [JsonProperty("1. Information")]
    public string Information { get; set; }

    [JsonProperty("2. Notes")]
    public string Notes { get; set; }

    [JsonProperty("3. Time Zone")]
    public string TimeZone { get; set; }
}

//[Preserve(AllMembers = true)]
public class StockQuoteDto
{
    [JsonProperty("1. symbol")]
    public string Symbol { get; set; }

    [JsonProperty("2. price")]
    public string Price { get; set; }

    [JsonProperty("3. volume")]
    public string Volume { get; set; }

    [JsonProperty("4. timestamp")]
    public string Timestamp { get; set; }

}

Это JSON, который я пытаюсь десериализовать:

{
    "Meta Data": {
        "1. Information": "Batch Stock Market Quotes",
        "2. Notes": "IEX Real-Time Price provided for free by IEX (https://iextrading.com/developer/).",
        "3. Time Zone": "US/Eastern"
    },
    "Stock Quotes": [
        {
            "1. symbol": "MSFT",
            "2. price": "100.2500",
            "3. volume": "--",
            "4. timestamp": "2018-06-22 15:59:57"
        },
        {
            "1. symbol": "FB",
            "2. price": "201.4100",
            "3. volume": "--",
            "4. timestamp": "2018-06-22 15:59:59"
        },
        {
            "1. symbol": "AAPL",
            "2. price": "185.3900",
            "3. volume": "--",
            "4. timestamp": "2018-06-22 16:01:08"
        }
    ]
}

Это код, который я использую для десериализации:

StockQuotesResultDto stockQuotes = JsonConvert.DeserializeObject<StockQuotesResultDto>(contentAsString);

Когда я отлаживаю свое приложение на своем телефоне, все свойства StockQuotesResultDto равны нулю (обратите внимание, что результат правильно извлекается из вызова API REST).Тем не менее, когда я отлаживаю свой тест, который выполняет тот же код - все в порядке.Я только начал играть с Xamarin, и я в полном проигрыше.Я прочитал несколько тем здесь и на других форумах, но не смог найти решение.Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 24 июня 2018

Пока я нашел «решение» своей проблемы.Оказывается, проблема возникает только тогда, когда я отлаживаю свое приложение на своем устройстве по прямой ссылке Xamarin. Если я запускаю его на эмуляторе - все нормально .Это приемлемо, пока я просто играю.Было бы интересно, будет ли он работать нормально, если он правильно развернут на устройстве.

Редактировать: при отладке на устройстве, но без Xamarin Live он также работает нормально.Оказывается, проблема возникает только через ссылку Xamarin Live.

...