You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Android绑定Java库:嵌套枚举转C#枚举失败求助

解决Xamarin绑定Java嵌套枚举为C#枚举的问题

核心问题分析

你当前的配置错误在于嵌套枚举的JNI类名路径——Java中嵌套类(包括枚举)的JNI签名需要用$连接外层类与嵌套类,而非直接写嵌套类名。原配置里的com/cloudipsp/android/Status是错误的,正确路径应该是com/cloudipsp/android/Receipt$Status。同时C#中嵌套类型用+分隔,所以CLR枚举类型也要对应调整。

步骤1:修正EnumFields.xml配置

将原配置中的JNI类路径和CLR枚举类型修改为嵌套类的正确格式:

<enum-field-mappings>
    <mapping jni-class="com/cloudipsp/android/Receipt$Status" clr-enum-type="Com.Cloudipsp.Android.Receipt+Status">
        <field jni-name="created" clr-name="Created" value="0" />
        <field jni-name="processing" clr-name="Processing" value="1" />
        <field jni-name="declined" clr-name="Declined" value="2" />
        <field jni-name="approved" clr-name="Approved" value="3" />
        <field jni-name="expired" clr-name="Expired" value="4" />
        <field jni-name="reversed" clr-name="Reversed" value="5" />
    </mapping>
</enum-field-mappings>

注意:CLR枚举成员名建议遵循C# PascalCase命名规范,所以把小写的created改成Created,以此类推。

步骤2:确保Receipt类的status字段被生成

如果修正枚举映射后status字段仍未生成,需要在Metadata.xml中添加配置,强制绑定工具识别该字段:

<metadata>
    <attr path="/api/package[@name='com.cloudipsp.android']/class[@name='Receipt']/field[@name='status']" name="managedType">Com.Cloudipsp.Android.Receipt+Status</attr>
</metadata>

这段配置会明确告诉绑定工具,Receipt类的status字段对应C#的Receipt.Status枚举类型。

步骤3:清理并重新构建项目

  1. 删除项目的obj和bin目录,清理缓存
  2. 重新生成绑定库
  3. 检查生成的C#代码:
    • Receipt类下应该会生成嵌套的Status枚举(而非继承自Java.Lang.Enum的类)
    • Receipt类中会出现Status Status { get; set; }属性

内容的提问来源于stack exchange,提问作者Artem Mishenkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 09:18:26