日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

java 类似xamarin_xamarin android如何将Java.Lang.Object类型转成C#类型

發布時間:2023/12/3 C# 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 类似xamarin_xamarin android如何将Java.Lang.Object类型转成C#类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題起源

其實這個標題也可以換一個更準確一點,因為我遇到的問題是:

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

}

總結

以上是生活随笔為你收集整理的java 类似xamarin_xamarin android如何将Java.Lang.Object类型转成C#类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。