using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
using NewtonsoftJsonSerializer = Newtonsoft.Json.JsonSerializer;
namespace Amazon.Lambda.Serialization.Json
{
///
/// Custom JSON converter for handling special event cases.
///
internal class JsonToMemoryStreamListDataConverter : JsonConverter
{
private static readonly TypeInfo MEMORYSTREAM_LIST_TYPEINFO = typeof(List).GetTypeInfo();
public override bool CanRead { get { return true; } }
public override bool CanWrite { get { return false; } }
public override bool CanConvert(Type objectType)
{
return MEMORYSTREAM_LIST_TYPEINFO.IsAssignableFrom(objectType.GetTypeInfo());
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, NewtonsoftJsonSerializer serializer)
{
var list = new List();
if (reader.TokenType == JsonToken.StartArray)
{
do
{
reader.Read();
if (reader.TokenType == JsonToken.String)
{
var dataBase64 = reader.Value as string;
var ms = Common.Base64ToMemoryStream(dataBase64);
list.Add(ms);
}
} while (reader.TokenType != JsonToken.EndArray);
}
return list;
}
public override void WriteJson(JsonWriter writer, object value, NewtonsoftJsonSerializer serializer)
{
throw new NotSupportedException();
}
}
}