2012-03-01 64 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>(); 

你的下一个疑问句重刑:如果你的问题会显示确切的错误信息,包括堆栈跟踪(或至少是发生的确切位置),这将非常有用。