将Java的ArrayList转换为C#

3
需要将Java ArrayList转换为C# ArrayList。
但是这样做不起作用。
//code in C#
public void DoSomething(Java.Lang.Object obj){
    Java.Util.ArrayList list = (Java.Util.ArrayList) obj;
}

异常:

未处理的异常:

System.InvalidCastException:指定的转换无效。

当我打印出obj.Class时,它返回class java.util.ArrayList

如何修复?


转换为Java.Util.IList时出现相同的异常。你想让我将它转换成什么? - theAnonymous
2
你们知道我在这里尝试使用Java对象编写C#代码,对吧?我的意思是,你们所有的评论都假定它是在Java中,而我明确说明代码是用C#编写的。 - theAnonymous
这并没有太多意义。p0是什么?你为什么认为从Java类型转换为C#类型是可能的呢? - Stephen C
也许这可以帮到你?https://stackoverflow.com/questions/12527408/how-to-convert-a-generic-list-from-and-to-java-lang-object-in-mono-for-android - ChristophE
除非您使用类似于IKVM.NET(如其他答案中提出的)或http://jni4net.com的库,否则Java和C#之间的最低公共分母是两者都具有低级别的C接口。在这种情况下,从Java获取的是指向Java对象的C指针,您需要使用JNI(https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/jniTOC.html)来操作它。如果您正在使用库,请告诉我们使用的是哪个库? - ewramner
显示剩余7条评论
3个回答

12

我不写C#代码,但如果是我需要将一个对象转换为另一种语言使用,我会将Java对象序列化为JSON格式,然后在C#中反序列化为我的对象。


1
这也是我处理的方法。将对象序列化为JSON或某个字符串表示数据的格式,以便于解析。根据方法调用和传递数据的大小和方式,我可能还会使用像MessagePack这样的压缩方法。 - David Watts

2
我认为你需要这个惊人的库:https://www.ikvm.net/,由Jeroen Frijters和贡献者开发。
IKVM.NET是Java在Mono和Microsoft .NET Framework上的实现。它包括以下组件:
- 在.NET中实现的Java虚拟机 - Java类库的.NET实现 - 使Java和.NET相互操作的工具
这是一个非常庞大的主题,你需要完成一些教程,例如将Java应用程序转换为.NET。祝你好运!

0

已经在Xamarin中准备好了,只需添加:

using Android.Gms.Extensions;

然后:

var list = listAsObject.JavaCast<ArrayList>();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接