C#序列化与反序列化(Serialize,Deserialize)实例详解
序列化是什么?
序列化是将对象转换为字节序列的过程。在C# 中,可以使用序列化将指定的对象转换为 XML 或二进制格式的数据。
序列化的作用
序列化主要用于对象的持久化存储,网络通讯等领域。在对象的持久化存储中,可以将对象转换为二进制格式或 XML 格式的数据,存储在磁盘上。在网络通讯中,可以将对象转换为二进制格式或 XML 格式的数据,传输到网络中的其他计算机上。
C#中的序列化
在C# 中,可以使用 System.Runtime.Serialization 命名空间中的 DataContractSerializer 对象对对象进行序列化。使用序列化功能的步骤如下:
- 先定义一个需要序列化的类
[DataContract]
public class User
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
[DataMember]
public string Address { get; set; }
}
上述代码定义了一个 User 类,包含了 Name、Age、Address 三个属性,并使用了 DataContract 和 DataMember 属性进行标记。
- 使用 DataContractSerializer 对象进行序列化
using System.Runtime.Serialization;
public static string Serialize(object obj)
{
string result = string.Empty;
using (MemoryStream memoryStream = new MemoryStream())
{
DataContractSerializer serializer = new DataContractSerializer(obj.GetType());
serializer.WriteObject(memoryStream, obj);
memoryStream.Position = 0;
using (StreamReader streamReader = new StreamReader(memoryStream))
{
result = streamReader.ReadToEnd();
}
}
return result;
}
上述代码演示了一个将对象序列化为 XML 字符串的示例。
- 使用 DataContractSerializer 对象进行反序列化
using System.Runtime.Serialization;
public static object Deserialize(string xml, Type type)
{
object result = null;
if (!string.IsNullOrEmpty(xml))
{
using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
{
DataContractSerializer serializer = new DataContractSerializer(type);
result = serializer.ReadObject(memoryStream);
}
}
return result;
}
上述代码演示了一个将 XML 字符串反序列化为对象的示例。
示例说明
示例1
// 定义一个 User 实例
User user = new User
{
Name = "John",
Age = 18,
Address = "北京市海淀区"
};
// 序列化为 XML 字符串
string xml = Serialize(user);
Console.WriteLine(xml);
上述代码演示了如何将一个 User 对象序列化为 XML 字符串,并将结果打印出来:
<User xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/SerializeDemo">
<Address>北京市海淀区</Address>
<Age>18</Age>
<Name>John</Name>
</User>
示例2
// 反序列化为 User 实例
User user2 = Deserialize(xml, typeof(User)) as User;
Console.WriteLine("Name:{0}, Age:{1}, Address:{2}", user2.Name, user2.Age, user2.Address);
上述代码演示了如何将一个 XML 字符串反序列化为 User 对象,并打印对象的属性值:
Name:John, Age:18, Address:北京市海淀区
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#序列化与反序列化(Serialize,Deserialize)实例详解 - Python技术站