Json.NET将值反序列化为Null或空数组
在我的应用程序中,我与外部json服务交互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”表示空
/// 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}”);
}
我知道区别,但这是外部服务。自定义反序列化是否还有一定的距离?