我有两个课程如下:
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?
答案 0 :(得分:3)
请查看堆栈溢出中的JSON serialization of enum as string。 没有你可以使用的特殊属性。 JavaScriptSerializer将枚举序列化为其数值而不是其字符串表示形式。您需要使用自定义序列化将枚举序列化为名称而不是数值。