c# - 在 Json.net 中序列化枚举列表

标签 c# json.net

我有一个解决方案,需要将许多 C# 类转换为 REST API 的 JSON 格式。我使用枚举是为了避免在枚举就足够时必须记住要传递的字符串。

为此,参数之一是枚举列表。因为我已经有一个使用 JsonConverter 编写的类,所以我想我只需将此枚举列表传递给 WriteJson 方法,就像我只是一个普通的枚举一样,它只会在幕后某处自动处理它的列表组件。不幸的是,事实并非如此。在我的 WriteJson 方法中,我有以下内容:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
  var e = (SuiteType) value;
  switch (e) {
    case SuiteType.Full:
      writer.WriteValue("complete");
      break;
    case SuiteType.Partial:
      writer.WriteValue("partial");
      break;
  }
}

当我尝试将其转换为 SuiteType 时,这会给出有关错误转换的错误,因为当然,入站值实际上是 SuiteType 的列表,而不仅仅是 SuiteType。考虑到这一点,我该如何处理这种自定义转换(因为枚举名称与它们输出的字符串或 int 值之间并不总是 1:1,同时仍然从此类枚举的集合进行转换?

最佳答案

当然,当我发布这个消息时,我就想到了答案。而不是在类对象上标记List属性,如:

[JsonProperty("types")]
[JsonConverter(typeof(SuiteTypeConverter))]
public List<SuiteType> Types { get;set;}

相反,从那里删除 JsonConverter 并将其放置在枚举定义的顶部,如下所示:

[JsonConverter(typeof(SuiteTypeConverter))]
public enum SuiteType {
...
}

而且效果很好。

关于c# - 在 Json.net 中序列化枚举列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36563449/

相关文章:

c# - 将 ASP MVC 应用程序部署到普通共享托管服务提供商时遇到问题

c# - 在 C# 中连接到外部 SQL 数据库

c# - 最短的内联集合初始值设定项? C#

json - F#:如何将 Json.NET [JsonConstructor] 属性应用于主构造函数?

c# - 为单个外部类型禁用 JSON.Net PreserveReferencesHandling

json.net - Newtonsoft.Json 导致 Visual Studio 2015 代码分析失败

c# - 谁能告诉我我在片段中犯了错误吗

c# - 在 C# 中,为什么我需要在启发式无法访问时键入 return?

c# - Json反序列化对象错误

c# - Shopify api 更新变体返回错误