草庐IT

Android Parcelable 和 Serializable

coder 2023-06-06 原文

所以我知道建议在 android 中使用 Parcelable 而不是 Serializable,因为它更快。

我的问题是:避免使用 Serializable 是不可能的吗?

如果我有一个想要序列化的自定义对象,假设我有以下类定义

public class Person {
   String name;
   int Age;
   ...
   ....
}

使这个 parcelable 很容易,因为 Person 类包含 parcel.write*() 支持的类型,即有 parcel.writeString 和 parcel.writeInt

现在,如果 Person 类如下:

public class PersonTwo {
   MyCustomObj customObj;
   String name;
   int Age;
   ...
   ....
}

我应该如何打包 MyCustomObj 对象? 看来我需要再次使用可序列化?但同样,我认为使用可序列化是很慢的,而且似乎我们别无选择,只能在这种情况下使用它。

我不明白

谁能告诉我在这种情况下我将如何打包 PersonTwo?

最佳答案

Ajay 提供的链接正是您正在寻找的内容,以及您如何做到这一点。 好吧,您可以做的是实现 Parcelable 到您的 CustomObject1 并为其创建一个 Parcelable 类,然后您可以使用该 Parcelable 类将其 Parcel 放在另一个 Parcelable 类中,该类将 Parcel 两个 CustomObjects

public class CustomObject1 implements Parcelable {

   // parcelable code CustomObject1
}

public class CustomObject2 implements Parcelable {

    private CustomObject1 obj1;

   // add  CustomObject1 here with getter setter
   // parcelable code for CustomObject2 

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(obj1, flags);
    }  
    private void readFromParcel(Parcel in) {
        obj1 = in.readParcelable(CustomObject1.class.getClassLoader());
    }
  ............
}

关于Android Parcelable 和 Serializable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9323044/

有关Android Parcelable 和 Serializable的更多相关文章

  1. c# - 使用 Serializable() 从 XML 文件中填充一个数组 - 2

    我目前正在尝试使用[Serializable()]命令对象反序列化XML,但我遇到了一些问题。这是代码示例:usingSystem;usingSystem.Xml.Linq;usingSystem.Xml.Serialization;usingSystem.IO;namespaceXmlManipulation{publicclassXmlManip{publicstaticTestCasesListSerializeTest()//testfunction{TestCasesListtestslist=null;stringpath=@"C:\Users\sxtx2987\Docum

  2. .net - 如何在 .net 中使没有 Serializable 属性的类可序列化 - 2

    我有一个调试器可视化工具,用于以数据表的形式查看类对象列表。但是代码的限制是该类应该是可序列化的,即应该标记为[Serializable],如果该类未标记为Serializable,则调试器会崩溃。那么,如果类未标记为可序列化,谁能告诉我如何在运行时使该类可序列化。 最佳答案 您不能在运行时修改现有类的元数据。 关于.net-如何在.net中使没有Serializable属性的类可序列化,我们在StackOverflow上找到一个类似的问题: https://

  3. java - JAXB - 列表 <Serializable>? - 2

    我用xjc制作了一些类。publicclassMyType{@XmlElementRefs({@XmlElementRef(name="MyInnerType",type=JAXBElement.class,required=false),})@XmlMixedprotectedListcontent;publicListgetContent(){if(content==null){content=newArrayList();}returnthis.content;}}但是我不能使用添加内部元素getContent().add(newItem);因为MyInnerType不是可序列化

  4. c# - 调试器可视化工具和 "Type is not marked as serializable" - 2

    我正在尝试创建一个调试器可视化工具,它会显示任何Control的控件层次结构。它已完成,但我收到异常“类型未标记为可序列化”。我该如何克服呢?控件是.NETWindows窗体框架类型,我无法将其标记为可序列化。 最佳答案 您还需要实现VisualizerObjectSource执行自定义序列化。例子:publicclassControlVisualizerObjectSource:VisualizerObjectSource{publicoverridevoidGetData(objecttarget,StreamoutgoingD

  5. c# - Serializable 和 DataContract(不是对比?) - 2

    我正在阅读我的新项目中的一些代码,发现前开发人员同时使用了Serializable和DataContract。[Serializable]和[DataContract(Namespace="Some.Name.Space",IsReference=true)]我假设当存在DataContract属性时,WCF将忽略Serializable。这是一个正确的假设吗?如果不是,同时使用两者有什么好处? 最佳答案 是的,如果存在[DataContract],则忽略[Serializable]。这可能对例如创建一个类型,该类型将具有一个用于W

  6. c# - 不使用 [Serializable] 时 [NonSerialized] 的好处 - 2

    我正在查看我正在处理的项目中的一些现有代码,我发现了一个实现为:publicclassThingOne{privateintA;privateintB;[NonSerialized]privateSystem.Timers.Timertimer1;}它不应该看起来更像这样吗?[Serializable]publicclassThingOne{privateintA;privateintB;[NonSerialized]privateSystem.Timers.Timertimer1;}或者即使类本身不是可序列化的,添加[NonSerialized]是否还有一些额外的好处?

  7. c# - 如何在 Entity Framework 5.0 生成的所有实体中添加 Serializable 属性 - 2

    我正在使用EF5.0生成POCO实体并在单独的数据访问层中使用它我想标记所有实体[Serializable]如何修改模板添加Serializable属性? 最佳答案 如果您不想编辑模板,您也可以在单独的代码文件中执行此操作-因为partial类很方便。所以如果这里的类型是My.Namespace命名空间中的Foo、Bar和Baz,就可以创建一个单独的同一项目中的文件,其中:usingSystem;namespaceMy.Namespace{[Serializable]partialclassFoo{}[Serializable]pa

  8. c# - 如何从 [Serializable] INotifyPropertyChanged 实现者中排除不可序列化的观察者? - 2

    我有将近一百个这样的实体类:[Serializable]publicclassSampleEntity:INotifyPropertyChanged{privatestringname;publicstringName{get{returnthis.name;}set{this.name=value;FirePropertyChanged("Name");}}[field:NonSerialized]publiceventPropertyChangedEventHandlerPropertyChanged;privatevoidFirePropertyChanged(stringpro

  9. c# - ASP.NET Web API 和 [Serializable] 类 - 2

    我有一个标有[Serializable]的类。当我从WebAPI返回它时,字段名称都很奇怪。通常返回的JSON是[{"OrderId":797...使用[Serializable]时返回的JSON[{"k__BackingField":797...我不想将其标记为可序列化以使用BinaryFormatter进行缓存。除了编写自定义序列化程序或制作不可序列化的孪生类并编写猴子代码以在两者之间“转换”之外,还有其他方法吗? 最佳答案 您只需要一行代码就可以让Json.NET再次忽略[Serializable]语义:((DefaultCo

  10. c# - SerializationException 类型 "is not marked as serializable"- 但它是 - 2

    在Windows窗体、.NETFramework4.0中,我正在尝试序列化我编写的类的实例。该类被标记为可序列化,但使用该类的表单(显然)不是。我不想序列化表单的实例。我想序列化我在类里面的数据。我类中的所有内容都标记为可序列化,那么为什么我仍然收到SerializationException?(点击>>HERE在新窗口中打开全尺寸图片)更新:这是我的BrazierCuttoff类和相关部分:[Serializable()]publicclassBrazierCuttoff:IEquatable{privateintqty;privateint[]joint,pass,shift;pr

随机推荐