【问题标题】:How do I serialize an enum value as a string?如何将枚举值序列化为字符串?
【发布时间】:2013-01-18 02:55:47
【问题描述】:
我正在使用 .net 的 JavaScriptSerializer,当序列化一个对象时,枚举被序列化为它们的 int 值而不是它们的字符串名称,这有点违背了枚举的目的。我如何让它将所有枚举序列化为它们的字符串名称?我可以使用内置的序列化程序来完成这项工作,还是应该使用更好的序列化程序?
感谢任何帮助。
【问题讨论】:
标签:
c#
json
asp.net-mvc-3
serialization
【解决方案1】:
Newtonsoft 的 JsonNet 序列化器具有内置枚举转换器的此功能。
在此处下载:http://json.codeplex.com/
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
var objToSerialize = new Object();
var settings = new JsonSerializerSettings();
settings.Converters.Add(new StringEnumConverter());
var serializer = JsonSerializer.Create(settings);
var sb = new StringBuilder();
using (var sw = new StringWriter(sb))
{
serializer.Serialize(sw, objToSerialize);
}
string json = sb.ToString();
【解决方案2】:
一种方法是使用 EnumMemberAttribute 属性的 Value 属性,如下面的 MSDN 示例。
[DataContract(Name = "CarCondition")]
public enum CarConditionWithDifferentNames
{
[EnumMember(Value = "New")]
BrandNew,
[EnumMember(Value = "Used")]
PreviouslyOwned,
[EnumMember]
Rental
}
【解决方案3】:
正如在许多其他帖子中看到的,.NET JsonSerializer 或 DataContractJsonSerializer 不尊重 EnumMember 属性,而是为枚举的不同成员使用数值。
因此,编写您自己的自定义序列化程序或使用一些 3rd 方库是前进的方向。