java 类似xamarin_xamarin android如何将Java.Lang.Object类型转成C#类型
发布日期:2021-10-31 15:52:18 浏览次数:2 分类:技术文章

本文共 1708 字,大约阅读时间需要 5 分钟。

问题起源

其实这个标题也可以换一个更准确一点,因为我遇到的问题是:

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.Object

public 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();

}

转载地址:https://blog.csdn.net/weixin_39987847/article/details/114731740 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java单例注册表_Java单例模式(Singleton)
下一篇:java按钮权限控制_详解Spring Security 中的四种权限控制方式

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月19日 23时13分14秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

python错误代码40035_python-(matplotlib.pyplot)散点图轴的顺序错误 2019-04-21
yaf mysql_Yaf框架的配置 2019-04-21
卸载linux下的mysql数据库实例_Linux下卸载MySQL数据库实例教程 2019-04-21
mysql导到相对位置_MySQL数据备份与恢复 2019-04-21
mysql安装连接测试c_Ubuntu 12.04下安装mysql并用C程序测试连接 2019-04-21
mysql数据库与mysqli_通过 PHP Mysqli 扩展与 MySQL 数据库交互 2019-04-21
java web权限_Javaweb权限管理设计思路 2019-04-21
fastdfs java上传文件_FastDFS java客户端文件上传demo 2019-04-21
find命令过滤 no such_linux find -exec rm -r 报No such file or directory 2019-04-21
斯坦福句法分析 java_斯坦福句法分析 2019-04-21
shell看java控制台_java - 为什么我的shell脚本的输出不能打印在控制台? - SO中文参考 - www.soinside.com... 2019-04-21
java i o中文版_Java文件I/O的三种方法 2019-04-21
java如何实现定时任务_Java定时任务的三种实现方式 2019-04-21
深圳php和java,深圳java技术培训学习(Java和PHP区别) 2019-04-21
mysql与oracle性能对比,Oracle与MySQl对比, 2019-04-21
nginx 配置文件 linux,Linux-nginx.conf配置文件模板 2019-04-21
机器人专用符文_LOL:机器人布里茨符文天赋这样点,欢乐模式从此开启! 2019-04-21
四剑客查找字符_Shell编程四剑客之grep 2019-04-21
单目视觉机器人的循迹_石头T7 和 T7 Pro,买哪款最划算?双目视觉导航避障有没有作用?... 2019-04-21
java 盘符 系统_JAVA入门 2019-04-21