可能重复:c#enum的JSON序列化为字符串
我有两个课程如下:
Transaction
int OrderNumber
// ... snip ...
IEnumerable<Item> 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看起来像“类别”:“Category1”而不是“Category”:0?
1 回答
请查看堆栈溢出中的JSON serialization of enum as string . 没有你可以使用的特殊属性 . JavaScriptSerializer将枚举序列化为其数值而不是其字符串表示形式 . 您需要使用自定义序列化将枚举序列化为其名称而不是数值 .