我正在使用 .net 的 JavaScriptSerializer,当序列化一个对象时,枚举被序列化为它们的 int 值而不是它们的字符串名称,这违背了枚举的目的。如何让它将所有枚举序列化为它们的字符串名称?我可以使用内置的序列化程序完成此操作,还是应该使用更好的序列化程序?
任何帮助表示赞赏。
我正在使用 .net 的 JavaScriptSerializer,当序列化一个对象时,枚举被序列化为它们的 int 值而不是它们的字符串名称,这违背了枚举的目的。如何让它将所有枚举序列化为它们的字符串名称?我可以使用内置的序列化程序完成此操作,还是应该使用更好的序列化程序?
任何帮助表示赞赏。
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();
一种方法是使用 EnumMemberAttribute 属性的 Value 属性,如下面的 MSDN 示例。
[DataContract(Name = "CarCondition")]
public enum CarConditionWithDifferentNames
{
[EnumMember(Value = "New")]
BrandNew,
[EnumMember(Value = "Used")]
PreviouslyOwned,
[EnumMember]
Rental
}
正如在许多其他帖子中看到的那样,.NET JsonSerializer 或 DataContractJsonSerializer 不尊重 EnumMember 属性,而是为枚举的不同成员使用数值。
因此,编写自己的自定义序列化程序或使用一些 3rd 方库是前进的方向。