我正在使用一个 Web 服务,它以以下格式将数据返回到 JSON 中

{
    "responseId": 2933574,
    "availableHotels": [
        {
            "processId": "HC-65870953",
            "hotelCode": "UKI9E6",
            "availabilityStatus": "InstantConfirmation",
            "totalPrice": 971,
            "totalTax": 0,
            "totalSalePrice": 0,
            "currency": "EUR",
            "boardType": "Bed & Continental Breakfast",
            "rooms": [
                {
                    "roomCategory": "Triple Room",
                    "paxes": [
                        {
                            "paxType": "Adult",
                            "age": 30
                        },
                        {
                            "paxType": "Adult",
                            "age": 30
                        },
                        {
                            "paxType": "Child",
                            "age": "6"
                        }
                    ],
                    "totalRoomRate": 486,
                    "ratesPerNight": [
                        {
                            "date": "2012-07-20",
                            "amount": 163
                        },
                        {
                            "date": "2012-07-21",
                            "amount": 163
                        },
                        {
                            "date": "2012-07-22",
                            "amount": 160
                        },
                        {
                            "date": "2012-07-23",
                            "amount": 0
                        }
                    ]
                },
                {
                    "roomCategory": "Triple Room",
                    "paxes": [
                        {
                            "paxType": "Adult",
                            "age": 30
                        },
                        {
                            "paxType": "Adult",
                            "age": 30
                        },
                        {
                            "paxType": "Child",
                            "age": "8"
                        }
                    ],
                    "totalRoomRate": 485,
                    "ratesPerNight": [
                        {
                            "date": "2012-07-20",
                            "amount": 163
                        },
                        {
                            "date": "2012-07-21",
                            "amount": 163
                        },
                        {
                            "date": "2012-07-22",
                            "amount": 160
                        },
                        {
                            "date": "2012-07-23",
                            "amount": -1
                        }
                    ]
                }
            ]
        },
        {
            "processId": "HH-22003963",
            "hotelCode": "UKPDNN",
            "availabilityStatus": "InstantConfirmation",
            "totalPrice": 1085,
            "totalTax": 0,
            "totalSalePrice": 0,
            "currency": "EUR",
            "boardType": "Bed and Breakfast",
            "rooms": [
                {
                    "roomCategory": "Triple Room",
                    "paxes": [
                        {
                            "paxType": "Adult",
                            "age": 30
                        },
                        {
                            "paxType": "Adult",
                            "age": 30
                        },
                        {
                            "paxType": "Child",
                            "age": "6"
                        }
                    ],
                    "totalRoomRate": 544,
                    "ratesPerNight": [
                        {
                            "date": "2012-07-20",
                            "amount": 136
                        },
                        {
                            "date": "2012-07-21",
                            "amount": 136
                        },
                        {
                            "date": "2012-07-22",
                            "amount": 136
                        },
                        {
                            "date": "2012-07-23",
                            "amount": 136
                        }
                    ]
                },
                {
                    "roomCategory": "Triple Room",
                    "paxes": [
                        {
                            "paxType": "Adult",
                            "age": 30
                        },
                        {
                            "paxType": "Adult",
                            "age": 30
                        },
                        {
                            "paxType": "Child",
                            "age": "8"
                        }
                    ],
                    "totalRoomRate": 541,
                    "ratesPerNight": [
                        {
                            "date": "2012-07-20",
                            "amount": 136
                        },
                        {
                            "date": "2012-07-21",
                            "amount": 136
                        },
                        {
                            "date": "2012-07-22",
                            "amount": 136
                        },
                        {
                            "date": "2012-07-23",
                            "amount": 133
                        }
                    ]
                }
            ]
        }
    ],
    "totalFound": 2,
    "searchId": "QG-67623913"
}

现在我有一个定义如下的类:
 public class getAvailableHotelResponse
    {
        public getAvailableHotelResponse();

        public hotel[] availableHotels { get; set; }
        [SoapElement(DataType = "integer")]
        public string responseId { get; set; }
        public string searchId { get; set; }
        [SoapElement(DataType = "integer")]
        public string totalFound { get; set; }
    }
hotel 类如下:
public class hotel
    {
        public hotel();

        public string availabilityStatus { get; set; }
        public string boardType { get; set; }
        public string currency { get; set; }
        public string hotelCode { get; set; }
        public string processId { get; set; }
        public roomResponse[] rooms { get; set; }
        [SoapElement(DataType = "integer")]
        public string specialDeal { get; set; }
        public float totalPrice { get; set; }
        [SoapIgnore]
        public bool totalPriceSpecified { get; set; }
        public float totalSalePrice { get; set; }
        [SoapIgnore]
        public bool totalSalePriceSpecified { get; set; }
        public float totalTax { get; set; }
        [SoapIgnore]
        public bool totalTaxSpecified { get; set; }
    }
roomResponse 类如下:
public class roomResponse
    {
        public roomResponse();

        public pax[] paxes { get; set; }
        public dailyRate[] ratesPerNight { get; set; }
        public string roomCategory { get; set; }
        public float totalRoomRate { get; set; }
        [SoapIgnore]
        public bool totalRoomRateSpecified { get; set; }
    }
pax 类如下:
 public class pax
    {
        public pax();

        [SoapElement(DataType = "integer")]
        public string age { get; set; }
        public string firstName { get; set; }
        public string lastName { get; set; }
        public string paxType { get; set; }
        public string title { get; set; }
    }
dailyRate 类如下:
 public class dailyRate
    {
        public dailyRate();

        public float amount { get; set; }
        [SoapIgnore]
        public bool amountSpecified { get; set; }
        [SoapElement(DataType = "date")]
        public DateTime date { get; set; }
        [SoapIgnore]
        public bool dateSpecified { get; set; }
    }

编辑
getAvailableHotelResponse h = new getAvailableHotelResponse();

h = (getAvailableHotelResponse)Newtonsoft.Json.JsonConvert.DeserializeObject(text);

我试过这个,它抛出以下错误:



JSON 的结构非常复杂,那么如何将其转换为我的对象?

最佳答案

删除不可编译的构造函数,如 public pax(); 并使用

var availHotels = JsonConvert.DeserializeObject<getAvailableHotelResponse>(text);

就这样。

事实上,如果您使用 dynamic ,您甚至不需要声明这一堆类( getAvailableHotelResponsehotelroomResponsepaxdailyRate 等)。例如,
dynamic response = Newtonsoft.Json.JsonConvert.DeserializeObject(text);

foreach (var hotel in response.availableHotels)
{
    Console.WriteLine(hotel.processId);
    foreach (var room in hotel.rooms)
    {
        Console.WriteLine("\t" + room.roomCategory);
    }
}

关于c# - 如何将这种类型的 json 响应转换为用户定义的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11495896/

10-11 10:26
查看更多