2012-03-01 63 views
0

我的代碼是這樣的:缺少JSON字段導致崩潰?

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; } 
    } 

IF JSON數據存在

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

IF JSON數據不存在

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

的事情是,如果兵沒有檢測到錯誤的詞,它崩潰,並給我一個錯誤,如NullReferenceException。我試圖做一個IF語句來看看這個流如果它的值是空白的,但似乎不起作用。

任何想法?

回答

0

如果您收到沒有拼寫一部分JSON的答案,在SearchResponseSpell屬性將是。如果是,你可能不取消引用這樣的:

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>(); 

你的下一個疑問句重刑:如果你的問題會顯示確切的錯誤信息,包括堆棧跟蹤(或至少是發生的確切位置),這將非常有用。