As mentioned here:
try injecting an IErrorSerializerSettingsFactory (introduced in v2.1)
with custom JsonConverter objects on it to get around this issue
Very simplified example (I'm not sure how to implement custom jsonConverter right way, you will have to figure that out yourself)
Startup class (using dependency injection):
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using System.Collections.Generic;
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton<IErrorSerializerSettingsFactory, CustomErrorSerializer>();
}
}
public class CustomErrorSerializer : IErrorSerializerSettingsFactory
{
public JsonSerializerSettings CreateJsonSerializerSettings()
{
return new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All,
Converters = new List<JsonConverter>
{
new CustomConverter()
}
};
}
}
}
CustomConverter class:
public class CustomConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (!value.GetType().IsSerializable)
return;
JToken t = JToken.FromObject(value);
t.WriteTo(writer);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter.");
}
public override bool CanRead
{
get { return false; }
}
public override bool CanConvert(Type objectType)
{
return true;
}
}
My not serializable exception:
public class HttpResponseException : Exception
{
public HttpStatusCode StatusCode { get; }
public HttpResponseException(HttpStatusCode statusCode)
{
StatusCode = statusCode;
}
}
When I throw it from activity function I'm not getting error saying "Failed to deserialize exception from TaskActivity".