首页 >后端开发 >C++ >如何在 C# 中序列化和反序列化对象?

如何在 C# 中序列化和反序列化对象?

DDD
DDD原创
2025-01-23 11:42:11288浏览

How to Serialize and Deserialize Objects in C#?

C# 对象的保存和恢复:序列化与反序列化

序列化将数据存储为可移植格式,方便对象在不同应用、系统或机器间传输。

要序列化对象,必须使用 [Serializable] 属性标记,并包含无参数构造函数。 此外,[XmlIgnore][JsonIgnore] 属性可用于排除特定属性或字段。

示例

考虑以下 SomeClass

<code class="language-csharp">[Serializable]
public class SomeClass
{
    public string someProperty { get; set; }
}

SomeClass object1 = new SomeClass { someProperty = "someString" };</code>

保存到文件

  • 二进制序列化 (BinarySerialization):

    <code class="language-csharp">  BinaryFormatter binaryFormatter = new BinaryFormatter();
    
      using (Stream stream = File.Create("object1.bin"))
      {
          binaryFormatter.Serialize(stream, object1);
      }</code>
  • XML 序列化 (XMLSerialization):

    <code class="language-csharp">  XmlSerializer serializer = new XmlSerializer(typeof(SomeClass));
    
      using (TextWriter writer = new StreamWriter("object1.xml"))
      {
          serializer.Serialize(writer, object1);
      }</code>
  • JSON 序列化 (JsonSerialization):

    <code class="language-csharp">  using (StreamWriter writer = new StreamWriter("object1.json"))
      {
          writer.Write(JsonConvert.SerializeObject(object1));
      }</code>

从文件恢复

  • 二进制反序列化 (BinaryDeserialization):

    <code class="language-csharp">  BinaryFormatter binaryFormatter = new BinaryFormatter();
    
      using (Stream stream = File.OpenRead("object1.bin"))
      {
          object1 = (SomeClass)binaryFormatter.Deserialize(stream);
      }</code>
  • XML 反序列化 (XMLDeserialization):

    <code class="language-csharp">  XmlSerializer serializer = new XmlSerializer(typeof(SomeClass));
    
      using (TextReader reader = new StreamReader("object1.xml"))
      {
          object1 = (SomeClass)serializer.Deserialize(reader);
      }</code>
  • JSON 反序列化 (JsonDeserialization):

    <code class="language-csharp">  using (StreamReader reader = new StreamReader("object1.json"))
      {
          object1 = JsonConvert.DeserializeObject<SomeClass>(reader.ReadToEnd());
      }</code>

以上是如何在 C# 中序列化和反序列化对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn