title: how to deal with JSON that changes?
body: <p>I'm sorry for my ignorance since I'm a newbie. I need to check if a twitch stream is live or not. I'm doing this by using <code>HttpClient</code> and GET request. The class <code>TwitchData</code> deserialize JSON as object is the following.</p>
  
  <pre><code>public partial class TwitchData
  {
      [JsonProperty("data")]
      public Datum[] Data { get; set; }
  
      [JsonProperty("pagination")]
      public Pagination Pagination { get; set; }
  }
  
  public partial class Datum
  {
      [JsonProperty("id")]
      public string Id { get; set; }
  
      [JsonProperty("user_id")]
      [JsonConverter(typeof(ParseStringConverter))]
      public long UserId { get; set; }
  
      [JsonProperty("game_id")]
      [JsonConverter(typeof(ParseStringConverter))]
      public long GameId { get; set; }
  
      [JsonProperty("community_ids")]
      public object[] CommunityIds { get; set; }
  
      [JsonProperty("type")]
      public string Type { get; set; }
  
      [JsonProperty("title")]
      public string Title { get; set; }
  
      [JsonProperty("viewer_count")]
      public long ViewerCount { get; set; }
  
      [JsonProperty("started_at")]
      public DateTimeOffset StartedAt { get; set; }
  
      [JsonProperty("language")]
      public string Language { get; set; }
  
      [JsonProperty("thumbnail_url")]
      public string ThumbnailUrl { get; set; }
  }
  
  public partial class Pagination
  {
      [JsonProperty("cursor")]
      public string Cursor { get; set; }
  }
  
  public partial class TwitchData
  {
      public static TwitchData FromJson(string json) =&gt; JsonConvert.DeserializeObject&lt;TwitchData&gt;(json, QuickType.Converter.Settings);
  }
  
  public static class Serialize
  {
      public static string ToJson(this TwitchData self) =&gt; JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
  }
  
  internal static class Converter
  {
      public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
      {
          MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
          DateParseHandling = DateParseHandling.None,
          Converters = {
              new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
          },
      };
  }
  
  internal class ParseStringConverter : JsonConverter
  {
      public override bool CanConvert(Type t) =&gt; t == typeof(long) || t == typeof(long?);
  
      public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
      {
          if (reader.TokenType == JsonToken.Null) return null;
          var value = serializer.Deserialize&lt;string&gt;(reader);
          long l;
          if (Int64.TryParse(value, out l))
          {
              return l;
          }
          throw new Exception("Cannot unmarshal type long");
      }
  
      public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
      {
          if (untypedValue == null)
          {
              serializer.Serialize(writer, null);
              return;
          }
          var value = (long)untypedValue;
          serializer.Serialize(writer, value.ToString());
          return;
      }
  
      public static readonly ParseStringConverter Singleton = new ParseStringConverter();
  }
  </code></pre>
  
  <p>and I do the request with this</p>
  
  <pre><code>HttpClient client = new HttpClient();
  string uri = "https://api.twitch.tv/helix/streams?user_id=59980349";
  client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Client-ID", token);
  var result = client.GetStringAsync(uri);
  jsonString = result.ToString();
  twitchData = PwdResetRequest.FromJson(jsonString);
  </code></pre>
  
  <p>The problem with this is that the JSON changes if the stream is offline thus making the written class <code>TwitchData</code> useless to be used for JsonConvert.DeserializeObject.</p>
  
  <p>Following are the JSONs for when the stream is online and offline.</p>
  
  <pre><code>{
    "data": [
      {
        "id": "30356128676",
        "user_id": "59788312",
        "game_id": "498652",
        "community_ids": [],
        "type": "live",
        "title": "A stream",
        "viewer_count": 1325,
        "started_at": "2018-09-07T16:30:09Z",
        "language": "en",
        "thumbnail_url": "url"
      }
    ],
    "pagination": {
      "cursor": "eydBIjpwdWGsLaJhIjp7IkGH4hNl6CH6MXr9"
    }
  }
  </code></pre>
  
  <p>and when its offline</p>
  
  <pre><code>{
    "data": [],
    "pagination": {}
  }
  </code></pre>