Java.IO.ISerializable Xamarin

Chr*_*Sim 5 c# java android xamarin.android xamarin

我正在尝试使用Iserializable在Android中传递对象,但它返回"无法从本机句柄激活类型的实例"异常.

以下是我的代码.

[FBUserParcel.cs]

using System;
using Android.OS;
using PlayCardLeh.Helpers;

    namespace PlayCardLeh.Android
    {
        public class FBUserParcel:Java.Lang.Object, Java.IO.ISerializable
        {
                Xamarin.Facebook.Model.IGraphUser fbUser;
                public FBUserParcel (Xamarin.Facebook.Model.IGraphUser user)
                {
                    fbUser = user;

                }
            }
    } 
Run Code Online (Sandbox Code Playgroud)

[MainActivity.cs]

private async Task FindFBUser(Xamarin.Facebook.Model.IGraphUser user) {
    if (user != null) {
        Console.WriteLine ("GOT USER: " + user.Name);
        try {
            var t = await User.FindUserWithFBID (user);
        }
        catch(NotFound NotFound) {

            RunOnUiThread (() => {
                Intent i = new Intent (this,typeof (RegisterActivity));
                FBUserParcel u = new FBUserParcel(user);
                StartActivity (i);
            });

        }

    }

    else
        Console.WriteLine ("Failed to get 'me'!");
}
Run Code Online (Sandbox Code Playgroud)

RegisterActivity.cs

protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);
    SetContentView (Resource.Layout.Register);

    if (Intent.HasExtra ("fbUser")) {
        var u = Intent.Extras;
        u.GetSerializable ("fbUser");

    }
}
Run Code Online (Sandbox Code Playgroud)

例外发生在"u.GetSerializable("fbUser");".对不起,我是Xamarin的新手,任何人都有使用Iserializable的经验吗?我在"FBUserParcel.cs"中错过了什么?

感谢Mug4n分享讨论同一问题的链接. http://forums.xamarin.com/discussion/451/communicate-with-iserializable

Ale*_*x.F 6

那么你可以通过序列Xamarin.Facebook.Model.IGraphUser化生成string或生成的任何序列化器来轻松解决它byte[].
例如,如果您使用Newtonsoft的Json.NET组件,您的代码将如下所示:

Xamarin.Facebook.Model.IGraphUser fbUser;
var fbUserSerialized = JsonConvert.SerializeObject (fbUser);
intent.PutExtra ("fbUser");
Run Code Online (Sandbox Code Playgroud)

并反序列化:

if (Intent.HasExtra ("fbUser")) {
    var fbUserSerialized = Intent.GetStringExtra ("fbUser");
    var fbUser = JsonConvert.DeserializeObject<Xamarin.Facebook.Model.IGraphUser>(fbUserSerialized);
}
Run Code Online (Sandbox Code Playgroud)