gpt4 book ai didi

c# - 在上课前删除 [Serializable] 属性

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:20 24 4
gpt4 key购买 nike

使用 XmlSerializer 时,使用 [Serializable] 标记您的类型很重要属性,SerializableAttribute 类的一部分。

class Program
{
static void Main(string[] args)
{
XmlSerializer serializer = new XmlSerializer(typeof(Person));
string xml;
using (StringWriter stringWriter = new StringWriter())
{
Person p = new Person
{
FirstName = "John",
LastName = "Doe",
Age = 42
};
serializer.Serialize(stringWriter, p);
xml = stringWriter.ToString();
}
Console.WriteLine(xml);
using (StringReader stringReader = new StringReader(xml))
{
Person p = (Person)serializer.Deserialize(stringReader);
Console.WriteLine("{0} {1} is {2} years old", p.FirstName, p.LastName, p.Age);
}
Console.ReadLine();
}
}
[Serializable]
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}

如您所见,Person 类标有 Serializable。如果不选择退出,该类型的所有成员都会自动序列化。

但是,如果我删除 Serializable 属性,结果仍然相同。

看图。

image

为什么? Serializable 属性没用?

最佳答案

When working with the XmlSerializer, it is important that you mark your types with the [Serializable] attribut

这是不正确的。只有一些序列化程序依赖于该属性,而不是 XmlSerializer。

请注意,.NET 框架中的各种序列化程序之间存在许多不一致之处。有些会调用默认构造函数/执行字段初始值设定项,有些则不会。有些会序列化私有(private)成员,有些则不会。一些使用 SerializableAttribute,一些不使用。

How does WCF deserialization instantiate objects without calling a constructor?

阅读您正在使用的序列化器的细节以避免意外。

关于c# - 在上课前删除 [Serializable] 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28031672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com