在Json.net

时间:2016-04-12 04:05:28

标签: 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,同时仍然从这些枚举的集合转换?

1 个答案:

答案 0 :(得分:1)

当然,我一发布,答案就出现了。而不是在类对象上标记List属性,例如:

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

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

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

它运作正常。