title: C# Check if JSON response contains key
body: <p>I'm making an HTTP request that returns JSON but depending if the request is successful or not then the fields returned are different.</p>
  
  <p>Consider the following snippet:</p>
  
  <pre><code>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&lt;MoveItemResponse&gt;(stringResponse);
  </code></pre>
  
  <p>The <code>MoveItemResponse</code> class:</p>
  
  <pre><code>public class MoveItemResponse
  {
      public string code;
      public string reason;
      public IList&lt;ItemInfo&gt; ItemInfo;
      public MoveItemResponse()
      {
          ItemInfo = new List&lt;ItemInfo&gt;();
      }
  }
  </code></pre>
  
  <p>How am I able to check if a specific field is returned? Depending on if the request is successful then either code &amp; reason will be returned, else itemInfo will be returned (where itemInfo is an object).</p>
  
  <p>Fail Response:</p>
  
  <pre><code>{
     "reason":"unlucky",
     "message":null,
     "code":460
  }
  </code></pre>
  
  <p>Successful Response:</p>
  
  <pre><code>{
     "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
        }
     ]
  }
  </code></pre>
  
  <p>Secondly, do I need to do the StreamReader to declare the returned JSON to a string before deserializing it?</p>