@ -9,74 +9,16 @@ namespace MediaBrowser.Common.Json.Converters
/// Convert Pipe delimited string to array of type.
/// Convert Pipe delimited string to array of type.
/// </summary>
/// </summary>
/// <typeparam name="T">Type to convert to.</typeparam>
/// <typeparam name="T">Type to convert to.</typeparam>
public class JsonPipeDelimitedArrayConverter < T > : Json Converter< T [ ] >
public sealed class JsonPipeDelimitedArrayConverter < T > : Json DelimitedArray Converter< T >
{
{
private readonly TypeConverter _typeConverter ;
/// <summary>
/// <summary>
/// Initializes a new instance of the <see cref="JsonPipeDelimitedArrayConverter{T}"/> class.
/// Initializes a new instance of the <see cref="JsonPipeDelimitedArrayConverter{T}"/> class.
/// </summary>
/// </summary>
public JsonPipeDelimitedArrayConverter ( )
public JsonPipeDelimitedArrayConverter ( ) : base ( )
{
_typeConverter = TypeDescriptor . GetConverter ( typeof ( T ) ) ;
}
/// <inheritdoc />
public override T [ ] Read ( ref Utf8JsonReader reader , Type typeToConvert , JsonSerializerOptions options )
{
{
if ( reader . TokenType = = JsonTokenType . Null )
{
return Array . Empty < T > ( ) ;
}
if ( reader . TokenType = = JsonTokenType . String )
{
// GetString can't return null here because we already handled it above
var stringEntries = reader . GetString ( ) ! . Split ( '|' , StringSplitOptions . RemoveEmptyEntries ) ;
if ( stringEntries . Length = = 0 )
{
return Array . Empty < T > ( ) ;
}
var parsedValues = new object [ stringEntries . Length ] ;
var convertedCount = 0 ;
for ( var i = 0 ; i < stringEntries . Length ; i + + )
{
try
{
parsedValues [ i ] = _typeConverter . ConvertFrom ( stringEntries [ i ] . Trim ( ) ) ;
convertedCount + + ;
}
catch ( FormatException )
{
// TODO log when upgraded to .Net6
// https://github.com/dotnet/runtime/issues/42975
// _logger.LogDebug(e, "Error converting value.");
}
}
var typedValues = new T [ convertedCount ] ;
var typedValueIndex = 0 ;
for ( var i = 0 ; i < stringEntries . Length ; i + + )
{
if ( parsedValues [ i ] ! = null )
{
typedValues . SetValue ( parsedValues [ i ] , typedValueIndex ) ;
typedValueIndex + + ;
}
}
return typedValues ;
}
// can't return null here because we already handled it above
return JsonSerializer . Deserialize < T [ ] > ( ref reader , options ) ! ;
}
}
/// <inheritdoc />
/// <inheritdoc />
public override void Write ( Utf8JsonWriter writer , T [ ] value , JsonSerializerOptions options )
protected override char Delimiter = > '|' ;
{
throw new NotImplementedException ( ) ;
}
}
}
}
}