c# - C# 可以用 Json 序列化枚举描述而不是枚举值
问题描述
我遇到了从两个不同的 Web 服务收到响应的情况。这两个响应的结构相同,但具有不同的父命名空间。我要做的是将这些响应转换为标准类,然后我可以将其传递给父对象。我认为最简单的方法是将传入的对象序列化为 Json,然后将对象反序列化为我的标准对象。这使我的处理代码相当简单
var jsonString = JsonConvert.SerializeObject(serviceResponse.Results);
var commonObject = JsonConvert.DeserializeObject<StandardResult>(jsonString);
在大多数情况下,这是有效的。但是,我正在扩展 StandardResult 对象,但我发现了一些问题。
对象的属性之一是具有以下属性的类:
public class EntryDetailType
{
public string EntryNumber {get; set;}
public string EntryText {get; set;
public int Item {get; set;}
}
问题是它Item
实际上可能是传入数据中的两个不同枚举之一。因此,尽管转换正确地将枚举的值放入其中,Item
但我不知道该值指的是哪个枚举。我不在这个阶段使用 JsonConverter 类,因为对象非常大,我想尽可能避免这种情况。
作为此过程的一部分,是否有一种方法能够获取枚举的描述而不是值,还是我将被迫编写自己的 json 转换器?请记住,该EntryDetailType
课程不在我的项目中。它是通过 wsdl 文档添加的 Web 服务的返回类型。
解决方案
好吧,如果该类EntryDetailType
确实具有名为Item
type的属性int
,则无法推断出enum
您拥有的名称表示值。
但是,如果这个类有Item
任何enum
类型的属性,那么它就像使用内置StringEnumConverter
作为 SerializeObject 方法的第二个参数来序列化到 Json 一样简单:
var jsonString = JsonConvert.SerializeObject(serviceResponse.Results, new Newtonsoft.Json.Converters.StringEnumConverter());
ps:我假设您使用的是 NewtonSoft 的 Json.NET。
推荐阅读
- c# - 为什么我的 .exe 文件在我安装程序时不起作用?
- c - 用 C 语言编写一个程序,从文件中读取最多 100 个整数,其中文件中的第一个值是文件中后续值的数量
- flutter - 如何在颤振中实现即将到来的日期倒计时
- dataframe - 无法在 DataFrames.jl 中执行列转换
- python - 使用 PIP 安装 jupyterlab
- sharepoint-online - SpFx + Ribbon function call
- perl - Perl optimization: inlining a function changed the results
- html - bootstrap4 row height needs to be smaller
- excel - 如何匹配索引vba
- python - python - 如何在python中的单元格之前为n-1行设置标志为-1(删除)?