Android 使用Visual Studio从Xamarin中的活动获取对象结果

Android 使用Visual Studio从Xamarin中的活动获取对象结果,android,visual-studio,android-activity,xamarin,onactivityresult,Android,Visual Studio,Android Activity,Xamarin,Onactivityresult,我想通过Visual Studio 2015从Xamarin中的子活动接收一个对象: [Serializable] class MyObj { public string value { get; } public MyObj(string v) { value = v; } } 儿童活动 Intent myIntent = new Intent (this, typeof(FirstActivity)); MyObj obj = new M

我想通过Visual Studio 2015从Xamarin中的子活动接收一个对象:

[Serializable]
class MyObj
{
    public string value { get; }

    public MyObj(string v)
    {
        value = v;
    }
} 
儿童活动

Intent myIntent = new Intent (this, typeof(FirstActivity));
MyObj obj = new MyObj("message");
myIntent.PutExtra ("obj", obj);                                        // cannot convert "obj" to Bundle
SetResult (Result.Ok, myIntent);
Finish();
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    if (requestCode == 0)
        if (resultCode == Result.Ok) {
            var helloLabel = FindViewById<TextView> (Resource.Id.helloLabel);
            MyObj obj = data.GetSerializableExtra("obj") as MyObj;
            helloLabel.Text = obj.Text.ToString();
        }
    }
}
FirstActivity

Intent myIntent = new Intent (this, typeof(FirstActivity));
MyObj obj = new MyObj("message");
myIntent.PutExtra ("obj", obj);                                        // cannot convert "obj" to Bundle
SetResult (Result.Ok, myIntent);
Finish();
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    if (requestCode == 0)
        if (resultCode == Result.Ok) {
            var helloLabel = FindViewById<TextView> (Resource.Id.helloLabel);
            MyObj obj = data.GetSerializableExtra("obj") as MyObj;
            helloLabel.Text = obj.Text.ToString();
        }
    }
}

我想得到一些建议。我是Xamarin的新手,正在使用Visual Studio 2015传递复杂对象有点棘手。您可以使用库,例如在发送之前序列化为字符串,然后在另一端反序列化

myIntent.PutExtra ("obj", JsonConvert.SerializeObject(obj));
//在您的接收活动中,
OnActivityResult

var objectAsString = intent.GetStringExtra("obj")
var result = JsonConvert.DeserializeObject<MyObject>(objectAsString)
var objectAsString=intent.GetStringExtra(“obj”)
var result=JsonConvert.DeserializeObject(objectAsString)

很好、简单的解决方案,性能也很好。

我总是选择
Parcelable
。非常快!(快10倍

以下是如何在Xamarin中实现它:

public class MyObj : Java.Lang.Object, IParcelable
{
    public string Value { get; set; }

    public MyObj()
    {
    }

    private MyObj(Parcel parcel)
    {
        // read your values in order
        Value = parcel.ReadString();
    }

    public void WriteToParcel(Parcel dest, ParcelableWriteFlags flags)
    {
        // read your values in order
        dest.WriteString(Value);
    }

    // -- stuff below here is needed from the parcel interfaces/mechanism --

    [ExportField("CREATOR")]
    public static MyObjCreator InitializeCreator()
    {
        return new MyObjCreator();
    }

    public class MyObjCreator : Java.Lang.Object, IParcelableCreator
    {
        public Java.Lang.Object CreateFromParcel(Parcel source)
        {
            return new MyObj(source);
        }

        public Java.Lang.Object[] NewArray(int size)
        {
            return new MyObj[size];
        }
    }

    public int DescribeContents()
    {
        return 0;
    }
}
SetResult

Intent myIntent = new Intent(this, typeof(FirstActivity));
MyObj obj = new MyObj {Value = "Hello"};
myIntent.PutExtra("obj", obj);
SetResult(Result.Ok, myIntent);
Finish();
var x = (MyObj)data.GetParcelableExtra("obj");
OnActivityResult

Intent myIntent = new Intent(this, typeof(FirstActivity));
MyObj obj = new MyObj {Value = "Hello"};
myIntent.PutExtra("obj", obj);
SetResult(Result.Ok, myIntent);
Finish();
var x = (MyObj)data.GetParcelableExtra("obj");

我怎样才能取回这个东西?