繁体   English   中英

C# 可以使用 Json 序列化枚举描述而不是枚举值

[英]C# Possible To Serialise Enum description instead Enum value With 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的类型为int的属性,则无法推断您拥有的enum哪个名称表示值。

但是,如果该类具有任何enum类型的属性Item ,那么它就像使用内置StringEnumConverter作为 SerializeObject 方法的第二个参数序列化为 Json 一样简单:

var jsonString = JsonConvert.SerializeObject(serviceResponse.Results, new Newtonsoft.Json.Converters.StringEnumConverter()); 

ps:我假设您使用的是 NewtonSoft 的 Json.NET。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM