Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json.NET将值反序列化为Null或空数组_.net_Deserialization_Json.net - Fatal编程技术网

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

Json.NET将值反序列化为Null或空数组,.net,deserialization,json.net,.net,Deserialization,Json.net,在我的应用程序中,我与外部json服务交互 /// simple response class public class AllForm { [JsonProperty("HOTELS")] public Hotel[] Hotels { get; set; } } 当“HOTELS”包含数据时,这种方法非常有效。 但服务返回“HOTELS:false”表示空

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


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

当“HOTELS”包含数据时,这种方法非常有效。 但服务返回“HOTELS:false”表示空收款。所以我有一个反序列化异常。
如何解决此情况(反序列化为null或空集合)?

HOTELS:false
HOTELS:null
HOTELS:[]
不同。您需要执行一些自定义反序列化或更改服务以正确返回

您可以使用动态类型,即:

    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}");
    }
void反序列化arrayorbool(字符串json)
{
var jss=new System.Web.Script.Serialization.JavaScriptSerializer();
动态数据=jss.Deserialize(json);
if(数据[“HOTELS”].GetType()==typeof(System.Boolean))
{
Console.WriteLine(“空数组”);
}
其他的
{
Console.WriteLine(“HOTELS[0]={0}HOTELS[1]={1}”,data[“HOTELS”][0],data[“HOTELS”][1]);
}
}
公共无效的DerializeArrayOrBool()
{
反序列化arrayorbool(@“{”“HOTELS”“:[123456]}”);
反序列化arrayorbool(@“{”“HOTELS”“:false}”);
}

我知道区别,但这是外部服务。自定义反序列化是否还有一定的距离?