Json.NET десериализует значение как ноль или пустой массив - PullRequest
0 голосов
/ 21 июля 2011

В моем приложении я взаимодействую с внешним сервисом json.


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


Это работает лучше, когда 'HOTELS' содержит данные.Но сервис возвращает «HOTELS: false» для пустой коллекции.Так что я исключение десериализации.Как я могу разрешить этот случай (десериализовать в нулевую или пустую коллекцию)?

Ответы [ 2 ]

0 голосов
/ 21 июля 2011

Вы можете использовать динамические типы, а именно:

    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}");
    }
0 голосов
/ 21 июля 2011

HOTELS:false не совпадает с HOTELS:null или HOTELS:[].Вам необходимо выполнить некоторую пользовательскую десериализацию или изменить службу для правильного возврата

...