在JSON中序列化enum值(C#)
在JSON中序列化enum值(C#)
这个问题已经有答案了:
可能有重复:
我有两个类如下:
Transaction int OrderNumber // ... snip ... IEnumerable Items Item string Sku // ... snip ... ItemCategory Category
ItemCategory是一个枚举,看起来像这样:
[DataContract] public enum ItemCategory { [EnumMember(Value = "Category1")] Category1, [EnumMember(Value = "Category2")] Category2 }
我的两个类分别用DataContract和DataMember属性进行了修饰。
我正在尝试获取Transaction项目的JSON表示形式。在Transaction中,我有一个公共方法,如下所示:
public string GetJsonRepresentation() { string jsonRepresentation = string.Empty; DataContractJsonSerializer serializer = new DataContractJsonSerializer(this.GetType()); using (MemoryStream memoryStream = new MemoryStream()) { serializer.WriteObject(memoryStream, this); jsonRepresentation = Encoding.Default.GetString(memoryStream.ToArray()); } return jsonRepresentation; }
这返回一个字符串,看起来像这样:
{ "OrderNumber":123, "Items":[{"SKU": "SKU1","Category": 0}] }
这正是我想要的,只是每个Item的“Category”枚举值被序列化为其整数值,而不是我在EnumMember属性中指定的值。我该如何使返回的JSON看起来像“Category”:“Category1”,而不是“Category”:0?
admin 更改状态以发布 2023年5月25日
请参考 Stack Overflow 上的将枚举转化为字符串的JSON序列化。
不,你不能使用特殊属性。JavaScriptSerializer将枚举序列化为它们的数字值而不是它们的字符串表示。你需要使用自定义序列化来将枚举序列化为它的名称而不是数值。