1
2
序列化和反射不是互斥的。您可以明确地序列化和反序列化一个对象,然后使用反射修改它。 串行化 序列化只是获取对象状态的“快照”的概念,以便您以后可以还原该快照。 如果您希望将对象存储在持久存储中,那么如果您不需要能够查询特定值,那么序列化是一个不错的选择。 请注意,至少有两种不同类型的序列化:
反射 反射是使用对象元数据来操作对象的能力。例如,您可以决定要将字符串“foo”分配给给定对象的所有可写字符串属性,而不考虑对象的类型。 当设计时不知道对象的类型时,这是最有趣的。 |
2
0
要使用反序列化对象,需要知道要将其反序列化到的类型。因此,不能只从XML创建对象,而不在程序集中定义其类型。 您可以做的是将XML存储在表示序列化对象的数据库中。然后可以从数据库中加载XML,并根据需要将其反序列化到对象实例中。XML的源不需要是序列化对象,因此可以根据需要手动创建它。 使用反射将是另一种情况。通过反射,您可以获取一个对象,并获得该对象上可用的方法和属性的列表。然后,您可以编写动态处理对象的代码,而不管它们实现的是哪种类型。这种方法的问题在于代码编写和读取都很笨拙,并且很容易引入只在运行时可见的错误。此外,由于使用反射带来的开销,代码将运行缓慢。 我不使用反射,而是让我的对象实现一些我可以将它们强制转换到的已知接口。这将允许我的代码是类型安全的,并且我可以避免反射的麻烦。代码也会运行得更快,可读性更强。 |
3
0
既不能使用XML序列化也不能使用反射动态创建新类型。这些技术只适用于现有类型。如果需要在运行时创建新类型,则必须使用其他方法。但是,生成fly类型的用处有限,因为您只能使用反射来访问这些类型。在.NET的下一个主要版本中使用动态运行时将为您提供创建和使用动态类型的更多选项。 XML序列化用于将对象序列化为已知格式(XML)。反射更通用,使您能够在运行时检查类型信息,并在编译时操作对象,而不必知道其类型。您也可以使用反射进行序列化,但与XML序列化相比,它要麻烦得多。 |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |