对于 Dictionary 类型的属性,请将「值类型」修改为 object(无论实际上是什么类型)。
即
[AVFieldName("dict_bad_words")]
public Dictionary<string, object> BadWords
{
get { return GetProperty<Dictionary<string, object>>("BadWords"); }
set { SetProperty(value, "BadWords"); }
}
这个原因是由于在反序列化的过程中,由于需要提前实例化对象,而实例化时,是无法知晓值类型的「具体类型」,所以先以先构造 Dictonary 对象,在反序列化过程中,会根据具体类型的值做反序列化。
所以,可以在拿到这个属性之后,再对值做类型转化,如
foreach (var v in xx.BadWords) {
string s = v as string;
....
}