using System; using System.Collections.Generic; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; namespace ChaosBot.Lodestone { public class LodestoneRankApi { [JsonProperty("success")] public bool Success { get; set; } [JsonProperty("error")] public object Error { get; set; } [JsonProperty("data")] public List Data { get; set; } } public class LodestoneRankedUser { [JsonProperty("lodestoneId")] [JsonConverter(typeof(ParseStringToLongConverter))] public long LodestoneId { get; set; } [JsonProperty("ingameRole")] public string IngameRole { get; set; } [JsonProperty("firstSeen")] public DateTimeOffset FirstSeen { get; set; } [JsonProperty("RecruitDate")] public DateTimeOffset RecruitDate { get; set; } [JsonProperty("MemberDate")] public DateTimeOffset MemberDate { get; set; } [JsonProperty("displayName")] public string DisplayName { get; set; } [JsonProperty("shouldBeRole")] public string ShouldBeRole { get; set; } //TODO: Check if this still needs to be nullable [JsonProperty("discordId")] public string DiscordId { get; set; } } internal class ParseStringToLongConverter : JsonConverter { public override bool CanConvert(Type t) => 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(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 ParseStringToLongConverter Singleton = new ParseStringToLongConverter(); } }