如何在Xamarin绑定库中重命名属性

时间:2016-12-01 14:50:10

标签: c# xamarin

我正在尝试为LINE SDK(在亚洲地区流行的SNS服务)构建一个Android绑定库。我将SDK中的jar文件添加到我的项目中,但无法编译,因为SDK的创建者恰好对类及其属性使用相同的名称。

这是项目从jar文件

生成的C#代码的一部分
public partial class AccessToken : global::Java.Lang.Object {
    // Metadata.xml XPath field reference: path="/api/package[@name='jp.line.android.sdk.model']/class[@name='AccessToken']/field[@name='accessToken']"
    [Register ("accessToken")]
    public string AccessToken {
        get { /* ... */ }
        set { /* ... */ }
    }
//...
}

现在简单地说,我想知道如何重命名此属性“AccessToken”。我尝试在Metadata.xml中添加一些命令,但它没有任何效果。这是我写的参考文献

<attr path="/api/package[@name='jp.line.android.sdk.model']/class[@name='AccessToken']/field[@name='accessToken']" name="propertyName">AccessTokenString</attr>

如果有人可以帮助我,我将不胜感激。我完全迷失在这里。

2 个答案:

答案 0 :(得分:2)

我认为唯一的问题是“propertyName”应该只是“name”:

 <attr path="/api/package[@name='jp.line.android.sdk.model']/class[@name='AccessToken']/field[@name='accessToken']" name="name">AccessTokenString</attr>

答案 1 :(得分:1)

@SuavePirate建议不会完全起作用(至少现在不行)。

如果您使用name,则还会将Register属性参数重命名为[Register ("AccessTokenString")],而不是[Register ("accessToken")]。因此,当它指出here时,Xamarin.Android绑定类将不再可能访问该属性,因为它没有绑定到现有的Java成员。

要正确更改包装成员的托管名称,必须设置managedName属性,即:

<attr path="/api/package[@name='jp.line.android.sdk.model']/class[@name='AccessToken']/field[@name='accessToken']" name="managedName">AccessTokenString</attr>