mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-13 12:14:17 +01:00
48 lines
No EOL
1.5 KiB
C#
48 lines
No EOL
1.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
public class SingleOrArrayConverter< T > : JsonConverter
|
|
{
|
|
public override bool CanConvert( Type objectType ) => objectType == typeof( HashSet< T > );
|
|
|
|
public override object ReadJson( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer )
|
|
{
|
|
var token = JToken.Load( reader );
|
|
return token.Type == JTokenType.Array
|
|
? token.ToObject< HashSet< T > >()
|
|
: new HashSet< T > { token.ToObject< T >() };
|
|
}
|
|
|
|
public override bool CanWrite => false;
|
|
|
|
public override void WriteJson( JsonWriter writer, object value, JsonSerializer serializer )
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
public class DictSingleOrArrayConverter< T, U > : JsonConverter
|
|
{
|
|
public override bool CanConvert( Type objectType ) => objectType == typeof( Dictionary< T, HashSet< U > > );
|
|
|
|
public override object ReadJson( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer )
|
|
{
|
|
var token = JToken.Load( reader );
|
|
|
|
if( token.Type == JTokenType.Array )
|
|
{
|
|
return token.ToObject< HashSet< T > >();
|
|
}
|
|
|
|
return new HashSet< T > { token.ToObject< T >() };
|
|
}
|
|
|
|
public override bool CanWrite => false;
|
|
|
|
public override void WriteJson( JsonWriter writer, object value, JsonSerializer serializer )
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
} |