當物件包含Enum屬性被序列化成JSON時,強制輸出Enum名稱
最近遇到一個需求,就是當某API丟出JSON格式的資料時,裡面若具備enum列舉等級的屬性,則該屬性被賦予成JSON的值不可為整數,必須為可識別的文字,例如該項次的ToString()後的字眼。
舉例來說,我們有下列student學生物件與shoes鞋子列舉:
class student
{
public string cName { get; set; }
public shoes eShose { get; set; }
}
enum shoes
{
Nike = 0,
Reebok = 1,
}
然後我們建立一個資料物件起來:
var oUser = new student()
{
cName = "王小明",
eShose = shoes.Reebok
};
經過Newtonsoft.Json.JsonConvert.SerializeObject(oUser)的序列化後,你應該會得到下列的JSON字串:
{
"cName": "王小明",
"eShose": 1
}
接下來我們的問題是,要怎麼讓這個eShose列舉屬性不要以整數(數值)的方式呈現,而是改採以列舉本身的項次文字字串來輸出呢?以這個例子來說,我們想要顯示成下列JSON資料:
{
"cName": "王小明",
"eShose": "Reebok"
}
答案出乎意料的簡單,只要在序列化方法的後面加入一個StringEnumConverter()引數即可。
Newtonsoft.Json.JsonConvert.SerializeObject(
oUser,
new Newtonsoft.Json.Converters.StringEnumConverter()
)