我有一个解决方案,需要将许多 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/