我正在使用.net的JavaScriptSerializer,并且在序列化对象时,枚举被序列化为它们的int值而不是它们的字符串名称,这种类型会破坏枚举的目的。如何让它将所有枚举序列化为其字符串名称?我可以使用内置的串行器完成此操作,还是应该使用更好的?
感谢任何帮助。
答案 0 :(得分:3)
Newtonsoft的JsonNet串行器具有内置转换器的内置功能。</ p>
在此处下载: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();
答案 1 :(得分:1)
一种方法是使用EnumMemberAttribute属性的Value属性,如以下MSDN示例所示。
[DataContract(Name = "CarCondition")]
public enum CarConditionWithDifferentNames
{
[EnumMember(Value = "New")]
BrandNew,
[EnumMember(Value = "Used")]
PreviouslyOwned,
[EnumMember]
Rental
}
答案 2 :(得分:-1)
如许多其他帖子所示,.NET JsonSerializer或DataContractJsonSerializer不尊重EnumMember属性,但使用枚举的不同成员的数值。
因此,编写自己的自定义序列化程序或使用某些第三方库是前进的方向。