Serializing enum values in JSON (C#)
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
JSON serialization of c# enum as string
我有两个班,如下所示:
1 2 3 4 5 6 7 8 9 | Transaction int OrderNumber // ... snip ... IEnumerable<Item> Items Item string Sku // ... snip ... ItemCategory Category |
itemcategory是一个如下所示的枚举:
1 2 3 4 5 6 7 8 9 | [DataContract] public enum ItemCategory { [EnumMember(Value ="Category1")] Category1, [EnumMember(Value ="Category2")] Category2 } |
我的两个类根据需要用datacontract和datamember属性修饰。
我正在尝试获取事务项的JSON表示。在事务中,我有一个如下的公共方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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; } |
这将返回一个如下所示的字符串:
1 2 3 4 | { "OrderNumber":123, "Items":[{"SKU":"SKU1","Category": 0}] } |
这是我想要的,除了每个项的"category"枚举值被序列化为其整数值,而不是我在enummember属性中指定的值。我如何才能得到它,使JSON返回的看起来像"category":"category1",而不是"category":0?
请将枚举的JSON序列化视为堆栈溢出中的字符串。不,没有可以使用的特殊属性。JavaScriptSerializer将枚举序列化为其数值,而不是字符串表示形式。您需要使用自定义序列化将枚举序列化为其名称,而不是数字值。