【发布时间】:2017-08-14 23:23:40
【问题描述】:
我是 JSON 新手,我需要从 JSON 响应中获取选定的值。根据我已经进行的一些研究,我创建了一个如下所示的 POCO;
public class RatesResponse
{
public class Hotel
{
public int hotel_id { get; set; }
public RoomTypes room_types { get; set; }
}
public class RoomTypes
{
[JsonExtensionData]
public Dictionary<string, object> rooms { get; set; }
}
public class RatesResponseObject
{
public List<Hotel> hotels { get; set; }
}
}
下面的 JSON 响应是我正在使用的示例;
{
"hotels": [
{
"hotel_id": 0,
"room_types": {
"Superior Suite Long Stay Offer - test": {
"url": "https://hoteltest.cosmores.com/?CHECK_IN_DATE=2017-08-20&CHECK_OUT_DATE=2017-08-31&PERSONS=2&ROOMS=3924&CURRENCY=EUR&ref=tripads",
"price": 1685,
"fees": 0,
"fees_at_checkout": 0,
"taxes": 229,
"taxes_at_checkout": 0,
"final_price": 1914,
"num_rooms": 1,
"currency": "EUR",
"room_amenities": [
"BATHROOMS",
"BEACH",
"TENNIS_COURT",
"SWIMMING_POOL",
"FITNESS_CENTER",
"RESTAURANT",
"STAIRS_ELEVATOR",
"BED_AND_BREAKFAST",
"CREDIT_CARDS_ACCEPTED"
],
"discounts": [
{
"marketing_text": "--MANOS-OFFER--",
"is_percent": true,
"amount": 13,
"price": 251.838154361,
"fees": 0,
"fees_at_checkout": 0,
"taxes": 34.1618456391,
"taxes_at_checkout": 0,
"final_price": 286
}
]
},
"Superior Double Room Long Stay Offer - test": {
"url": "https://hoteltest.cosmores.com/?CHECK_IN_DATE=2017-08-20&CHECK_OUT_DATE=2017-08-31&PERSONS=2&ROOMS=5385&CURRENCY=EUR&ref=tripads",
"price": 1213,
"fees": 0,
"fees_at_checkout": 0,
"taxes": 165,
"taxes_at_checkout": 0,
"final_price": 1378,
"num_rooms": 1,
"currency": "EUR",
"room_amenities": [
"BEACH",
"TENNIS_COURT",
"SWIMMING_POOL",
"FITNESS_CENTER",
"RESTAURANT",
"STAIRS_ELEVATOR",
"BED_AND_BREAKFAST",
"CREDIT_CARDS_ACCEPTED"
],
"discounts": [
{
"marketing_text": "--MANOS-OFFER--",
"is_percent": true,
"amount": 13,
"price": 181.32347114,
"fees": 0,
"fees_at_checkout": 0,
"taxes": 24.5965288601,
"taxes_at_checkout": 0,
"final_price": 205.92
}
]
},
"Superior Double with Sea View Long Stay Offer - test": {
"url": "https://hoteltest.cosmores.com/?CHECK_IN_DATE=2017-08-20&CHECK_OUT_DATE=2017-08-31&PERSONS=2&ROOMS=5386&CURRENCY=EUR&ref=tripads",
"price": 1011,
"fees": 0,
"fees_at_checkout": 0,
"taxes": 137,
"taxes_at_checkout": 0,
"final_price": 1148,
"num_rooms": 1,
"currency": "EUR",
"room_amenities": [
"BEACH",
"TENNIS_COURT",
"SWIMMING_POOL",
"FITNESS_CENTER",
"RESTAURANT",
"STAIRS_ELEVATOR",
"BED_AND_BREAKFAST",
"CREDIT_CARDS_ACCEPTED"
],
"discounts": [
{
"marketing_text": "--MANOS-OFFER--",
"is_percent": true,
"amount": 13,
"price": 151.102892617,
"fees": 0,
"fees_at_checkout": 0,
"taxes": 20.4971073834,
"taxes_at_checkout": 0,
"final_price": 171.6
}
]
}
}
}
]
}
我需要获取的字段是;
- hotel_id
- 房间名称(即高级套房长期住宿优惠 - 测试)
- final_price
- num_rooms
任何帮助将不胜感激,因为我已经看了 2 天了!
【问题讨论】:
-
你说的是javascript吗?
-
@Steve,不,我没有使用 javascript。
-
@Dave,在你 JSON 中“Superior Suite Long Stay Offer - test”是属性名称,我认为在 C# 中拥有带有空格的对象属性可能是个问题,是否可以将其更改为:
"room_types": { "typeName": "Superior Suite Long Stay Offer - test", "url": "https://hoteltest.cosmores.com/?CHECK_IN_DATE=2017-08-20&CHECK_OUT_DATE=2017-08-31&PERSONS=2&ROOMS=3924&CURRENCY=EUR&ref=tripads", "price": 1685,?我看到您正在尝试将其解析为 Dictionaty,但如果您更改 JSON,则获取必要的字段会简单得多 -
@ViktorOleksyshyn 不,我无法更改它,因为它来自供应商,所以我不得不使用他们提供给我的东西