2012-01-09 7 views
1

私はNewtonsoft.Jsonを使ってjsonの文字列をObjectに逆シリアル化していますが、ノードがnullかどうかは判断できません。例えば。 jo["data"]["prevtime"]、時にはjsonにはノードが["prevtime"]、時には["prevtime"]がありません。 ["prevtime"]nullの場合、エラーが報告されます。jsonのノードを判断するには

var jo = JObject.Parse(content); 
if (jo["data"].ToString() == "") 
    return new StatusCollection(); 

var jInfo = jo["data"]["info"]; 
StatusCollection list = new StatusCollection(); 
Status status = null; 

if (jInfo != null) 
{ 
    foreach (var j in jInfo.Children()) 
    { 

     if (jo["data"]["prevtime"] != null) 
     { 
      status.Nexttime = jo["data"]["nexttime"].ToString(); 
      status.Prevtime = jo["data"]["prevtime"].ToString(); 
     } 

     status = j.ToObject<Status>(); 
     if (!string.IsNullOrEmpty(status.Head)) 
     { 
      status.Head += "/50"; 
     } 
     if (!string.IsNullOrEmpty(status.From)) 
     { 
      status.From = "来自" + status.From; 
     } 
     list.Add(status); 
    } 
} 
+0

この行がエラーを報告します[IF(!城[ "データ"] [ "prevtime"] = NULL)]がない場合は、[ "prevtime"]城の[中」データ"]。 –

答えて

2

したいトークンを選択してください、と

if (jo["data"].Select("prevtime") != null) 
{ 
     status.Prevtime = jo["data"].Value<string>("prevtime"); 
     status.Nexttime = jo["data"].Value<string>("nexttime"); 
} 

JSON.NETドキュメントトークン値を取得するプロパティがあります:

Link 1

Link 2

は、
+0

今はうまく動作します。多くの感謝です。 –

3

現在のバージョン以下のように、それは次のようになります。

if (jo["data"].Select***Token***("prevtime") != null) 
{ 
     status.Prevtime = jo["data"].Value<string>("prevtime"); 
     status.Nexttime = jo["data"].Value<string>("nexttime"); 
} 
関連する問題