我有一个解决方案,需要将许多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 {
...
}
而且效果很好。