using System.Globalization;
using Newtonsoft.Json.Converters;
public partial class TwitchData
public Datum[] Data { get; set; }
[JsonProperty("pagination")]
public Pagination Pagination { get; set; }
public partial class Datum
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; }
public string Type { get; set; }
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
public string Cursor { get; set; }
public partial class TwitchData
public static TwitchData FromJson(string json)
return JsonConvert.DeserializeObject<TwitchData>(json, Converter.Settings);
public override string ToString()
return this.Pagination.Cursor;
public static class Serialize
public static string ToJson(this TwitchData self)
return JsonConvert.SerializeObject(self, Converter.Settings);
internal static class Converter
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
internal class ParseStringConverter : JsonConverter
public override bool CanConvert(Type t)
return 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<string>(reader);
if (Int64.TryParse(value, out 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);
var value = (long)untypedValue;
serializer.Serialize(writer, value.ToString());
public static readonly ParseStringConverter Singleton = new ParseStringConverter();
public static void Main()
var jsonString = "{ \"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\" } }";
var twitchData = TwitchData.FromJson(jsonString);
Console.WriteLine(twitchData);
Console.WriteLine("Hello World");