chaosbot/ChaosBot/Lodestone/LodestoneRankedUser.cs
2020-08-30 23:04:44 +02:00

80 lines
2.4 KiB
C#

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<LodestoneRankedUser> 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<string>(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();
}
}