📜  类型未标记为可序列化. - C# (1)

📅  最后修改于: 2023-12-03 15:27:27.174000             🧑  作者: Mango

类型未标记为可序列化 - C#

在 C# 程序中,当我们需要序列化一个对象时,我们需要确保该对象被标记为可序列化。这是因为只有可序列化的对象才能被用于数据交换,并在不同的应用程序之间进行传输。

在某些情况下,我们可能会遇到错误“类型未标记为可序列化”。这意味着所涉及的类没有被标记为可序列化,无法在网络上进行传输。

要解决这个问题,我们需要在类声明中加入 [Serializable] 属性,如下所示:

[Serializable]
public class MyClass
{

}

现在,我们可以将 MyClass 对象序列化并在网络上进行传输。

需要注意的是,仅标记一个类为可序列化并不能保证对象中的所有属性都可以被序列化。如果您的类包含无法序列化的属性,则需要使用 [NonSerializable] 属性来将其标记为不可序列化。

关于 C# 的序列化和反序列化,我们可以使用以下代码示例:

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class MyClass
{
    public string Name;
    public int Age;
}

class Program
{
    static void Main(string[] args)
    {
        // 序列化一个 MyClass 对象
        MyClass myClass = new MyClass();
        myClass.Name = "Tom";
        myClass.Age = 20;

        BinaryFormatter formatter = new BinaryFormatter();
        MemoryStream memoryStream = new MemoryStream();
        formatter.Serialize(memoryStream, myClass);
        memoryStream.Position = 0;

        // 反序列化 MyClass 对象
        MyClass deserializedClass = (MyClass)formatter.Deserialize(memoryStream);
        Console.WriteLine($"Name: {deserializedClass.Name}, Age: {deserializedClass.Age}");
    }
}

上面的代码中,我们将 MyClass 对象序列化为二进制数据并存储在 MemoryStream 中,然后反序列化该数据并打印 MyClass 对象的 Name 和 Age 属性。

希望这篇文章对你有所帮助,如有疑问,请随时联系我。