在Json.net中序列化枚举列表



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

为此,其中一个参数是枚举列表。由于我已经有一个使用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 {
...
}

而且效果很好。

相关内容

  • 没有找到相关文章

最新更新