Json.NET将值反序列化为Null或空数组

时间:2011-07-21 16:12:16

标签: .net deserialization json.net

在我的应用程序中,我正在与外部json服务进行交互。


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


当'HOTELS'包含数据时,这会有效。 但是对于空集合,服务返回'HOTELS:false'。所以我反序列化异常。 我该如何解决这种情况(反序列化为null或空集合)?

2 个答案:

答案 0 :(得分:0)

HOTELS:falseHOTELS:nullHOTELS:[]不同。您需要进行一些自定义反序列化或更改服务才能正确返回

答案 1 :(得分: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}");
    }