在 VB.NET 中,可以通过多种方法实现对象的序列化:标准的 .NET 序列化器(BinaryFormatter,XmlSerializer,DataContractSerializer,JsonSerializer)。
何时使用:
BinaryFormatter — 已过时,不建议出于安全考虑使用。XmlSerializer — 方便与外部程序交换数据和存储设置。DataContractSerializer — 适合序列化复杂对象和与 WCF 交互。JsonSerializer(System.Text.Json 或 Newtonsoft.Json) — 用于现代 Web API 和跨语言交互。细节:
使用 XmlSerializer 的代码示例:
<Serializable()> Public Class Person Public Property Name As String Public Property Age As Integer End Class Dim p As New Person With {.Name = "Ivan", .Age = 30} Dim serializer As New Xml.Serialization.XmlSerializer(GetType(Person)) Using stream As New IO.FileStream("person.xml", IO.FileMode.Create) serializer.Serialize(stream, p) End Using
可以序列化一个包含未标记为可序列化的类型属性的对象吗?会发生什么?
答案:
如果类包含成员(属性/字段),其类型未标记为可序列化,则序列化将会失败并出现错误。例如,类型为 FileStream 的字段的对象无法通过 XmlSerializer 进行序列化——会引发异常,因为该类型不支持序列化。
故事
由于私有构造函数引发的序列化错误: 在数据迁移过程中,开发人员尝试序列化只有一个私有构造函数的类。结果 — 序列化失败并出现错误,迁移过程被中断。
故事
循环引用: 在项目中使用 XmlSerializer 进行序列化,但对象之间存在循环引用。序列化导致 StackOverflowException 和服务崩溃。
故事
意外数据丢失: 在通过 JsonSerializer 序列化的复杂对象中,成员意外标记为
[JsonIgnore],导致在传输时丢失部分数据,进一步的反序列化丢失了对象的重要参数。