c# - 将枚举序列化为字符串

标签 c# json datacontract

我有一个枚举:

public enum Action {
    Remove=1,
    Add=2
}

还有一个类(class):

[DataContract]
public class Container {
    [DataMember]
    public Action Action {get; set;}
}

当将 Container 的实例序列化为 json 时,我得到:{Action:1}(如果 Action 是 Remove)。

我想得到:{Action:Remove}(而不是 int 我需要 ToString 形式的枚举)

我可以在不向类(class)添加其他成员的情况下这样做吗?

最佳答案

使用 Json.Net ,您可以将自定义的 StringEnumConverter 定义为

public class MyStringEnumConverter : Newtonsoft.Json.Converters.StringEnumConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        if (value is Action)
        {
            writer.WriteValue(Enum.GetName(typeof(Action),(Action)value));// or something else
            return;
        }

        base.WriteJson(writer, value, serializer);
    }
}

并序列化为

string json=JsonConvert.SerializeObject(container,new MyStringEnumConverter());

关于c# - 将枚举序列化为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9156820/

相关文章:

c# - 在 Webpart 中更改命名空间时出错

json - Elixir - 结构中的大写键

javascript - 从 JSON 响应创建 Ember 对象并使用 Handlebars 显示

c# - 无法将基类(数据协定)转换为派生类

c# - 从 WCF 服务返回不同的对象(列表或错误类)

c# - [DataContract] 的命名空间

c# - UPX最好的压缩方式是什么

c# - 如何在 C# 中导入 PKCS#8 RSA 私钥(由 OpenSSL 创建)

c# - 报告异步任务的进度

java - 如何使用 Java 中的 Gson 库遍历具有多个根元素的 JSON 文件?