2011-07-21 46 views
0

在我的應用程序中,我正在與外部json服務進行交互。Json.NET將值反序列化爲空或空陣列

 

/// simple response class 
public class AllForm 
    { 
     [JsonProperty("HOTELS")] 
     public Hotel[] Hotels 
     { 
      get; 
      set; 
     } 
    } 

 

當'HOTELS'包含數據時,這會起作用。 但空服務返回'酒店:虛假'。所以我有反序列化異常。 我該如何解決這種情況(反序列化爲空集合或空集合)?

回答

0

HOTELS:falseHOTELS:nullHOTELS:[]不相同。你需要做一些定製的反序列化或更改服務返回正確

+0

我知道其中的差別,但它的外部服務。定製反序列化是否還有其他方法? – sh1ng

0

你可以使用動態類型,即:

void DeserializeArrayOrBool(string json) 
    { 
     var jss = new System.Web.Script.Serialization.JavaScriptSerializer(); 

     dynamic data = jss.Deserialize<dynamic>(json); 

     if (data["HOTELS"].GetType() == typeof(System.Boolean)) 
     { 
      Console.WriteLine("empty array"); 
     } 
     else 
     { 
      Console.WriteLine("HOTELS[0]={0} HOTELS[1]={1}", data["HOTELS"][0], data["HOTELS"][1]); 
     } 
    } 

    public void DerializeArrayOrBool() 
    { 
     DeserializeArrayOrBool(@"{""HOTELS"":[123, 456]}"); 
     DeserializeArrayOrBool(@"{""HOTELS"":false}"); 
    }