【问题标题】:Json.NET Deserialize value as Null or empty ArrayJson.NET 将值反序列化为 Null 或空数组
【发布时间】:2011-07-21 16:12:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net deserialization json.net


    【解决方案1】:

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

    【讨论】:

    • 我知道区别,但它是外部服务。自定义反序列化是否还有一段距离?
    【解决方案2】:

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

        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}");
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多