假设我有一个示例类:
public class SomeObject
{
private FlagEnumerable _someFlagValue = FlagEnumerable.Flag1;
public SomeObject()
{
}
[DataMember(Name = "someFlagValue")]
[Browsable(false)]
public FlagEnumerable SomeFlagValue
{
get { return _someFlagValue; }
set { _someFlagValue= value; }
}
}
这就是我描述我的方式FlagEnumerable
:
[DataContract]
[Flags]
[JsonConverter(typeof(JsonEnumConverter))]
public enum FlagEnumerable
{
[EnumMember]
Flag1 = 1,
[EnumMember]
Flag2 = 2,
[EnumMember]
Flag3 = 4
}
此外,我有一个自定义 JSON 转换器,可以将我的枚举转换为字符串,将枚举标记为字符串数组,反之亦然。
此代码运行良好,并成功反序列化示例 JSON:
{
someFlagValue: [
"Flag1"
]
}
问题是如何将全局转换器应用于 JsonSerializer?当我从中删除[JsonConverter(typeof(JsonEnumConverter))]
然后FlagEnumerable
通过调用添加它时
MyJsonSerializer.Converters.Add(new JsonEnumConverter());
我收到此错误:
无法将当前 JSON 数组(例如 [1,2,3])反序列化为“FlagEnumerable”类型,因为该类型需要 JSON 原始值(例如字符串、数字、布尔值、null)才能正确反序列化。要修复此错误,请将 JSON 更改为 JSON 原始值(例如字符串、数字、布尔值、null)或将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如可以是从 JSON 数组反序列化。JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组反序列化。
任何帮助表示赞赏!抱歉,如果不清楚,请随时提出问题。