Parcelable List <string>,List <int>

时间:2017-12-21 16:52:19

标签: c# android xamarin parcelable

我在使用Parcelable传递我班级中的List时遇到问题。我的字符串的值(partNbr和partdescription)正在通过ok,但我在Write和Read之间的某处丢失了列表。

我在使用Serializable或JSON路线方面没有太多运气,但如果有人能提供我需要的一个好的c#示例。

我愿意再次尝试。我读错了价值吗?任何帮助将不胜感激。相关代码发布在下面。

public class Part : Java.Lang.Object, IParcelable
{
    public string partNbr { get; set; }
    public string partDescription { get; set; }
    public List<string> uomList { get; set; }
    public List<int> qtyList { get; set; }

    #region IParcelable Implementation

    private static readonly PartXParcelableCreator<Part> _creator = 
        new PartXParcelableCreator<Part>((parcel) => new Part(parcel));

    [ExportField("CREATOR")]
    public static PartXParcelableCreator<Part> GetCreator()
    {
        return _creator;
    }
    public Part(Parcel parcel)
    {
        partNbr = parcel.ReadString();
        partDescription = parcel.ReadString();
        parcel.ReadStringList(uomList);
        parcel.ReadList(qtyList, null);
    }


    public int DescribeContents()
    {
        return 0;
    }

    public void WriteToParcel(Parcel dest, [GeneratedEnum] ParcelableWriteFlags flags)
    {
        //debugging here shows a count of 3 items in uomList and 6 in qtyList
        dest.WriteString(partNbr);
        dest.WriteString(partDescription);
        dest.WriteStringList(uomList);
        dest.WriteList(qtyList);
    }
    #endregion



}

public class PartXParcelableCreator<T> : Java.Lang.Object, IParcelableCreator
    where T : Java.Lang.Object, new()
{
    private readonly Func<Parcel, T> _createFunc;

    public PartXParcelableCreator(Func<Parcel, T> createFromParcelFunc)
    {
        _createFunc = createFromParcelFunc;
    }

    #region IParcelableCreator Implementation
    public Java.Lang.Object CreateFromParcel(Parcel source)
    {
        //tried debugging source values here, but List values are null at this point
        return _createFunc(source);
    }

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

1 个答案:

答案 0 :(得分:1)

正如@Jason所说,您可以尝试使用JSON.NET包。

  

我正在尝试这个,但是在下一个活动中该对象将显示为null。

不要扩展Java.Lang.Object,修改您的Part类,如下所示:

public class Part
{
    public string partNbr { get; set; }
    public string partDescription { get; set; }
    public List<string> uomList { get; set; }
    public List<int> qtyList { get; set; }
}

那应该是可行的。