Serialize/Deserialize Perl Class Objects

本文介绍了一种在Perl中将类对象序列化为字符串的方法,并讨论了使用Data::Dumper和FreezeThaw模块进行序列化和反序列化的优缺点。通过实例展示了如何解决对象嵌套引用的问题。
Today in a small project I need to serialize a perl class object to string in order to cache it. And when getting back the value from the cache I need to deserialize it to original class objects.

There are good articles on the solutions:

http://www.ohmpie.com/serialization/

http://www.onperl.net/Serializing-and-Deserializing-using-Data-Serializer-pm

http://www.perlmonks.org/?node_id=8070

http://my.safaribooksonline.com/book/programming/perl/0596004567/objects-databases-and-applications/advperl2-chp-4-sect-2


First, I tried Data::Dumper which is quite simple. But if you class object has nested reference, when deserializing you will get 'undef' for the reference. E.g., if a part of the dumped sting is like this:

bless( {
'id' => '1',
'date' => '20130618',
'date_range' => $VAR1->{'logs'}[0]{'date_range'},
}, 'SiteLog::Entity::Log' ),


the data_range you get will be undef.


Finally I tried FreezeThaw, it works fine!
在C#中,序列化(Serialize)和反序列化(Deserialize)是用于将对象转换为字节流或字符串,以便于存储或传输,以及将字节流或字符串转换回对象的过程。序列化通常用于将对象状态保存到文件、数据库或通过网络传输,而反序列化则用于从这些存储介质中恢复对象状态。 C# 提供了多种序列化技术,其中最常用的包括二进制序列化、XML序列化和JSON序列化。以下是每种序列化技术的简单介绍和示例: ### 二进制序列化 二进制序列化是将对象转换为二进制格式,以便于高效存储和传输。C# 提供了 `System.Runtime.Serialization.Formatters.Binary.BinaryFormatter` 类来实现二进制序列化。 ```csharp using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; [Serializable] public class Person { public string Name { get; set; } public int Age { get; set; } } public class BinarySerializationExample { public void Serialize(Person person, string filePath) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream(filePath, FileMode.Create)) { formatter.Serialize(stream, person); } } public Person Deserialize(string filePath) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream(filePath, FileMode.Open)) { return (Person)formatter.Deserialize(stream); } } } ``` ### XML序列化 XML序列化是将对象转换为XML格式。C# 提供了 `System.Xml.Serialization.XmlSerializer` 类来实现XML序列化。 ```csharp using System; using System.IO; using System.Xml.Serialization; public class Person { public string Name { get; set; } public int Age { get; set; } } public class XmlSerializationExample { public void Serialize(Person person, string filePath) { XmlSerializer serializer = new XmlSerializer(typeof(Person)); using (TextWriter writer = new StreamWriter(filePath)) { serializer.Serialize(writer, person); } } public Person Deserialize(string filePath) { XmlSerializer serializer = new XmlSerializer(typeof(Person)); using (TextReader reader = new StreamReader(filePath)) { return (Person)serializer.Deserialize(reader); } } } ``` ### JSON序列化 JSON序列化是将对象转换为JSON格式。C# 提供了 `System.Text.Json` 命名空间中的 `JsonSerializer` 类来实现JSON序列化。 ```csharp using System; using System.IO; using System.Text.Json; public class Person { public string Name { get; set; } public int Age { get; set; } } public class JsonSerializationExample { public void Serialize(Person person, string filePath) { JsonSerializerOptions options = new JsonSerializerOptions { WriteIndented = true }; string jsonString = JsonSerializer.Serialize(person, options); File.WriteAllText(filePath, jsonString); } public Person Deserialize(string filePath) { string jsonString = File.ReadAllText(filePath); return JsonSerializer.Deserialize<Person>(jsonString); } } ``` 通过这些示例,你可以看到C#中不同序列化技术的使用方法。选择哪种序列化技术取决于具体的需求和应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值