我正在编写一个JSON转换器,其中一些属性被装饰为映射指定。我使用反射来使用该映射描述确定要创建的对象类型及其映射方式。以下是一个示例...
[JsonMapping("location", JsonMapping.MappingType.Class)]
public Model.Location Location { get; set; }
我的映射在处理集合时出现问题...
[JsonMapping("images", JsonMapping.MappingType.Collection)]
public IList<Image> Images { get; set; }
问题在于我无法将List转换为属性的列表类型。
private static List<object> Map(Type t, JArray json) {
List<object> result = new List<object>();
var type = t.GetGenericArguments()[0];
foreach (var j in json) {
result.Add(Map(type, (JObject)j));
}
return result;
}
这个方法返回一个列表,但是使用反射时需要先实现 IConvertable 接口再进行 property.SetValue 操作。
有没有更好的方式来处理这个问题?
IList<T>
才能这样做。C# 不支持逆变性,所以你不能将IList<string> list = new List<object>();
进行赋值。 - Andreas