宝洁网站建设评价,张家港网站制作企优,海南政务网,时装网站的建设问题起源其实这个标题也可以换一个更准确一点#xff0c;因为我遇到的问题是#xff1a;xamarin android中的Class继承了Java.Lang.Object #xff0c;将json序列化成c#类型时发现无法赋值#xff0c;序列化的格式没问题#xff0c;但是Class的属性值没有复制成功。xamari…问题起源其实这个标题也可以换一个更准确一点因为我遇到的问题是xamarin android中的Class继承了Java.Lang.Object 将json序列化成c#类型时发现无法赋值序列化的格式没问题但是Class的属性值没有复制成功。xamarin android做一个列表展示使用的是RecyclerView采用的是的一个第三库https://github.com/code-jar/MaterialDesignDemo绑定到xamarin android中最基本的使用方法如下public class FlowItemAdapter : BaseQuickAdapter, View.IOnClickListener{private Context context;public FlowItemAdapter(Context context, List data) : base(Resource.Layout.item_flowIndex, data){this.context context;}protected override void Convert(BaseViewHolder holder, Java.Lang.Object item){var currentModel item as Java.Lang.Object;}我们会发现这个Convert方法第二个参数是一个Java.Lang.Object类型所以列表项的实体类必须继承Java.Lang.Objectpublic class TestItemModel:Java.Lang.Object{public string Id { get; set; }}在序列化json的时候就会出现无法赋值var data JsonConvert.DeserializeObject(jsonTest);data的结构是集合但是没有赋值成功。这一点让我怀疑应该这个TestItemModel继承了Java.Lang.Object 导致后来思考了一下能不能不继承java.lang.object呢解决思路TestItemModel是可以不继承java.lang.object当然解决这个问题目前来说只能放弃继承了不然无法序列化赋值非常麻烦。不继承的话FlowItemAdapter中重写抽象方法 convert的第二个参数如何转化呢正如标题所示如何将java.lang.Object类型转成c#类型呢这个库的源码https://github.com/CymChad/BaseRecyclerViewAdapterHelper/blob/master/library/src/main/java/com/chad/library/adapter/base/BaseQuickAdapter.java抽象方法Convert的第二个参数是个泛型绑定到xamarin android中就编程了Java.Lang.Object所以我们就需要这个java中的类型转成c#类型代码如下就一个扩展方法public static class ObjectTypeHelper{public static T Cast(this Java.Lang.Object obj) where T : class{var propertyInfo obj.GetType().GetProperty(Instance);return propertyInfo null ? null : propertyInfo.GetValue(obj, null) as T;}}实践结果protected override void Convert(BaseViewHolder holder, Java.Lang.Object itemModel){var currentModel item.Cast();}