80 lines
2.4 KiB
C#
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();
|
|
}
|
|
}
|