【问题标题】: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 方库是前进的方向。

      【讨论】:

        猜你喜欢
        • 2012-02-27
        • 1970-01-01
        • 1970-01-01
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 2016-05-13
        • 2017-06-16
        • 2020-03-24
        相关资源
        最近更新 更多