簡體   English   中英

從Azure Function返回的JSON中將枚舉序列化為字符串

[英]Serialize enum as string in JSON returned from Azure Function

有沒有辦法配置Azure Functions如何將對象序列化為JSON以獲取返回值? 我想使用字符串而不是int來表示枚舉值。

例如,鑒於此代碼: -

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");
    }
}

該函數返回: -

{
   "Sauce": 1
}

如何讓它返回下面?

{
   "Sauce": "Hot"
}

我已經嘗試返回一個字符串而不是一個對象,但結果包含\\"轉義;我想要一個JSON結果,而不是一個JSON對象的轉義字符串表示。

我知道在標准ASP.NET我可以使用config來設置序列化選項。 這在函數中是否可行,或者我應該將所有枚舉轉換為字符串常量?

根據我的測試,我發現Newtonsoft.Json的默認版本(在創建azure函數項目時安裝)是10.0.2。 通過使用此版本的Newtonsoft.Json,它將自動用數字替換枚舉字符串名稱。

這是一個解決方法,我建議你可以打開Nuget包安裝Newtonsoft.Json 9.0.1,然后它會運行良好。

更多細節,您可以參考下圖:

在此輸入圖像描述

結果:

在此輸入圖像描述

這讓我難以忍受了一段時間,但檢查了這個答案

基本上,使用Json.NET屬性StringEnumConverter

[JsonConverter(typeof(StringEnumConverter))]
public enum Sauce
{
    [EnumMember(Value = "none")]
    None,
    [EnumMember(Value = "hot")]
    Hot
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM