删除 class 之前的 [Serializable] 属性
Remove [Serializable] attribute before class
使用 XmlSerializer
时,使用 [Serializable
标记类型很重要]]属性,SerializableAttribute
class.
的一部分
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
class 标记为 Serializable
。如果不选择退出,该类型的所有成员都会自动序列化。
然而,如果我删除 Serializable
属性,结果仍然相同。
看图。
为什么? Serializable
属性没用?
When working with the XmlSerializer, it is important that you mark your types with the [Serializable] attribut
这是不正确的。只有一些序列化程序依赖于该属性,而不是 XmlSerializer。
请注意,.NET 框架中的各种序列化程序之间存在许多不一致之处。有些会调用默认的 constructor/execute 字段初始值设定项,有些则不会。有些会序列化私有成员,有些则不会。有的使用SerializableAttribute,有的不使用
How does WCF deserialization instantiate objects without calling a constructor?
仔细阅读您正在使用的序列化程序的细节以避免意外。
使用 XmlSerializer
时,使用 [Serializable
标记类型很重要]]属性,SerializableAttribute
class.
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
class 标记为 Serializable
。如果不选择退出,该类型的所有成员都会自动序列化。
然而,如果我删除 Serializable
属性,结果仍然相同。
看图。
为什么? Serializable
属性没用?
When working with the XmlSerializer, it is important that you mark your types with the [Serializable] attribut
这是不正确的。只有一些序列化程序依赖于该属性,而不是 XmlSerializer。
请注意,.NET 框架中的各种序列化程序之间存在许多不一致之处。有些会调用默认的 constructor/execute 字段初始值设定项,有些则不会。有些会序列化私有成员,有些则不会。有的使用SerializableAttribute,有的不使用
How does WCF deserialization instantiate objects without calling a constructor?
仔细阅读您正在使用的序列化程序的细节以避免意外。