gpt4 book ai didi

c# - 通过属性在(反)序列化期间控制枚举值格式

转载 作者:行者123 更新时间:2023-11-30 13:47:37 27 4
gpt4 key购买 nike

问题

假设我有一个代表某事或其他的枚举:

public enum ResultState
{
Found,
Deleted,
NotFound
}

在我的序列化 json 中,我希望将这些值序列化为 "found""gone""not_found"分别。 (注意:这不是驼峰式,而是一个完全自定义的字符串!)

我正在使用 JSON.NET

到目前为止的故事

我的一切工作几乎都正常 - 枚举通过 StringEnumConverter 全局转换为字符串,但是我无法在我的生活中看到如何实现与上述类似的东西。

我最初的想法是将 JsonProperty(...) 属性应用于相关的枚举值,但这似乎不起作用!

可能的解决方案?

我能想到的完成这项工作的唯一方法是编写我自己的继承自 StringEnumConverterJsonConverter,但使用一些额外的魔法来处理新的 JsonName 我要创建的属性。

如您所想,我不喜欢这个想法。

我想知道你们这些优秀的人是否可以提出一个更简单的替代方案?

最佳答案

碰巧的是,我对整件事想得太多了。

我使用了 System.Runtime.Serialization 中的 EnumMember 属性,效果很好。

为了完整性,这是我的新枚举:

public enum QueryResultState
{
[EnumMember(Value="found")]
Found,

[EnumMember(Value="gone")]
Deleted,

[EnumMember(Value="not_found")]
NotFound
}

调用 JsonConvert.Serialize(...) 时不要忘记包含 StringEnumConverter,因为 JSON.NET 默认将枚举序列化为整数:

JsonConvert.SerializeObject(someObjectWithAnEnum, new StringEnumConverter());

关于c# - 通过属性在(反)序列化期间控制枚举值格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16178593/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com