Я делаю HTTP-запрос, который возвращает JSON, но в зависимости от успешного запроса или нет, возвращаемые поля отличаются.C# Проверьте, содержит ли ответ JSON ключ
Рассмотрим следующий фрагмент кода:
WebResponse response = moveItemRequest.GetResponse();
string stringResponse = string.Empty;
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
stringResponse = reader.ReadToEnd();
}
// deserialize json response
MoveItemResponse moveItemResponse = JsonConvert.DeserializeObject<MoveItemResponse>(stringResponse);
MoveItemResponse
класс:
public class MoveItemResponse
{
public string code;
public string reason;
public IList<ItemInfo> ItemInfo;
public MoveItemResponse()
{
ItemInfo = new List<ItemInfo>();
}
}
Как я в состоянии проверить, если определенное поле возвращается? В зависимости от того, будет ли запрос успешным, возвращается либо код &, либо возвращается itemInfo (где itemInfo - это объект).
Сбой Ответ:
{
"reason":"unlucky",
"message":null,
"code":460
}
Успешное Ответ:
{
"errorState":null,
"credits":6310,
"itemInfo":[
{
"tradeId":717011415,
"itemData":{
"id":101619602325,
"timestamp":1447170628,
"formation":"f3412",
"untradeable":false,
"assetId":158023,
"rating":94,
"itemType":"player",
"resourceId":-2147325625,
"owners":1,
"discardValue":752,
"itemState":"forSale",
"cardsubtypeid":3,
"lastSalePrice":0,
"morale":50,
"fitness":99,
"injuryType":"none",
"injuryGames":0,
"preferredPosition":"RW",
"statsList":[
{
"value":0,
"index":0
},
{
"value":0,
"index":1
},
{
"value":0,
"index":2
},
{
"value":0,
"index":3
},
{
"value":0,
"index":4
}
],
"lifetimeStats":[
{
"value":0,
"index":0
},
{
"value":0,
"index":1
},
{
"value":0,
"index":2
},
{
"value":0,
"index":3
},
{
"value":0,
"index":4
}
],
"training":0,
"contract":7,
"suspension":0,
"attributeList":[
{
"value":92,
"index":0
},
{
"value":88,
"index":1
},
{
"value":86,
"index":2
},
{
"value":95,
"index":3
},
{
"value":24,
"index":4
},
{
"value":62,
"index":5
}
],
"teamid":241,
"rareflag":1,
"playStyle":250,
"leagueId":53,
"assists":0,
"lifetimeAssists":0,
"loyaltyBonus":1,
"pile":5,
"nation":52
},
"tradeState":"active",
"buyNowPrice":1726000,
"currentBid":0,
"offers":0,
"watched":null,
"bidState":"none",
"startingBid":426000,
"confidenceValue":100,
"expires":3212,
"sellerName":"FIFA UT",
"sellerEstablished":0,
"sellerId":0,
"tradeOwner":false
}
],
"duplicateItemIdList":null,
"bidTokens":{
},
"currencies":[
{
"name":"COINS",
"funds":6310,
"finalFunds":6310
},
{
"name":"POINTS",
"funds":0,
"finalFunds":0
},
{
"name":"DRAFT_TOKEN",
"funds":0,
"finalFunds":0
}
]
}
Во-вторых, нужно ли мне сделать StreamReader, чтобы объявить возвращаемый JSON в строку, прежде чем десериализации это?
Просьба вставить образец как JSON (проход, так и отказ), чтобы помочь вам лучше. – ndd
Обычно код HTTP 200 OK или аналогичный код будет означать, что объект MoveItemResponse будет доставлен, в то время как код состояния сбоя обычно подразумевает ответ Code + Reason. Посмотрите, можете ли вы переключиться на [HttpClient] (https://msdn.microsoft.com/en-us/library/system.net.http.httpclient (v = vs.118) .aspx), так что у вас есть доступ к [EnsureSuccessStatusCode ] (https://msdn.microsoft.com/en-us/library/system.net.http.httpresponsemessage.ensuresuccessstatuscode (v = vs.118) .aspx), чтобы проверить это автоматически, иначе используйте [эту таблицу для сравнения] (https://en.wikipedia.org/wiki/List_of_HTTP_status_codes). – Machinarius
HTTP 200 OK по-прежнему возвращается для обоих ответов, поскольку запрос был успешным, даже если действие не было. – CPB07