2

我正在使用 .net 的 JavaScriptSerializer,当序列化一个对象时,枚举被序列化为它们的 int 值而不是它们的字符串名称,这违背了枚举的目的。如何让它将所有枚举序列化为它们的字符串名称?我可以使用内置的序列化程序完成此操作,还是应该使用更好的序列化程序?

任何帮助表示赞赏。

4

3 回答 3

4

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();
于 2013-01-18T03:03:12.080 回答
1

一种方法是使用 EnumMemberAttribute 属性的 Value 属性,如下面的 MSDN 示例。

[DataContract(Name = "CarCondition")]
public enum CarConditionWithDifferentNames
{
    [EnumMember(Value = "New")]
    BrandNew,
    [EnumMember(Value = "Used")]
    PreviouslyOwned,
    [EnumMember]
    Rental
}
于 2013-01-18T03:03:06.650 回答
-1

正如在许多其他帖子中看到的那样,.NET JsonSerializer 或 DataContractJsonSerializer 不尊重 EnumMember 属性,而是为枚举的不同成员使用数值。

因此,编写自己的自定义序列化程序或使用一些 3rd 方库是前进的方向。

于 2013-06-05T09:16:42.190 回答