Отсутствие поля JSON вызывает сбои? - PullRequest
0 голосов
/ 02 марта 2012

Мой код выглядит так:

    using (StreamReader streamReader1 = new StreamReader(response.GetResponseStream()))
    {
        string resultString = streamReader1.ReadToEnd();
        var ser = new DataContractJsonSerializer(typeof(RootObject));

        var stream = new MemoryStream(Encoding.Unicode.GetBytes(resultString));
        DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(RootObject));
        RootObject myBook = (RootObject)jsonSerializer.ReadObject(stream);

        Deployment.Current.Dispatcher.BeginInvoke(() => Shops.ItemsSource = myBook.SearchResponse.Spell.Results); }

  public class Query
    {
        public string SearchTerms { get; set; }
    }


    public class Result
    {   [DataMember(IsRequired=false)]
        public string Value { get; set; }
    }

    public class Spell
    {
        [DataMember(IsRequired = false)]
        public int Total { get; set; }
        [DataMember(IsRequired = false)]
        public List<Result> Results { get; set; }
    }

    public class SearchResponse
    {
        public bool IsRequired { get; set; }
        public string Version { get; set; }
        public Query Query { get; set; }
        public Spell Spell { get; set; }
    }

    public class RootObject
    {
        public SearchResponse SearchResponse { get; set; }
    }

ЕСЛИ ДАННЫЕ JSON ДАЛЕЕ

  {"SearchResponse":{"Version":"2.0","Query":{"SearchTerms":"mispell"},"Spell":{"Total":1,"Results":[{"Value":"misspell"}]}}}

ЕСЛИ ДАННЫХ JSON НЕ СУЩЕСТВУЕТ

  {"SearchResponse":{"Version":"2.0","Query":{"SearchTerms":"mispel"}}}

Дело в том, что, если Bing не обнаруживает неправильное слово, он вылетает и выдает ошибку типа NullReferenceException. Я попытался сделать оператор IF, глядя на поток, если его значение пустое, но, похоже, не работает.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 30 марта 2012

Если вы получите ответ JSON без части Spell , свойство Spell в SearchResponse будет null . Если это null , вы не можете разыменовывать его следующим образом:

myBook.SearchResponse.Spell.Results

(Это не имеет ничего общего с JSON. Так работает C #.)

Так что вместо:

Shops.ItemsSource = myBook.SearchResponse.Spell.Results

Вы, вероятно, хотите написать:

if (myBook.SearchResponse.Spell = null)
    Shops.ItemsSource = myBook.SearchResponse.Spell.Results;
else
    Shops.ItemsSource = new List<Result>();

Для вашего следующего вопроса: Было бы очень полезно, чтобы на ваших вопросах отображалось точное сообщение об ошибке, включая трассировку стека (или, по крайней мере, точную строку, где оно произошло).

0 голосов
/ 02 марта 2012
...