Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Serialize enum as string in JSON returned from Azure Function

Is there a way to configure how Azure Functions serializes an object into JSON for the return value? I would like to use strings rather than ints for enum values.

For instance, given this code:-

public enum Sauce
{
    None,
    Hot
}

public class Dish
{
    [JsonConverter(typeof(StringEnumConverter))]
    public Sauce Sauce;
}

public static class MyFunction
{
    [FunctionName("MakeDinner")]
    public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
    {
        var dish = new Dish() { Sauce = Sauce.Hot };
        return req.CreateResponse(HttpStatusCode.OK, dish, "application/json");
    }
}

The function returns:-

{
   "Sauce": 1
}

How can I make it return the below?

{
   "Sauce": "Hot"
}

I've tried returning a string instead of an object, but the result contains \" escapes; I want a JSON result, not an escaped string representation of a JSON object.

I know that in standard ASP.NET I can use the config to set serialization options. Is this even possible in Functions, or should I convert all my Enums to string constants?

like image 868
System.Cats.Lol Avatar asked Aug 04 '17 18:08

System.Cats.Lol


1 Answers

This had me stumped for a while but check this answer.

Basically, use the Json.NET attribute StringEnumConverter.

[JsonConverter(typeof(StringEnumConverter))]
public enum Sauce
{
    [EnumMember(Value = "none")]
    None,
    [EnumMember(Value = "hot")]
    Hot
}
like image 200
NickBrooks Avatar answered Sep 22 '22 14:09

NickBrooks