C# 为什么BinaryFormatter序列化私有成员而不是XMLSerializer或SoapFormatter?

C# 为什么BinaryFormatter序列化私有成员而不是XMLSerializer或SoapFormatter?,c#,.net,.net-4.0,C#,.net,.net 4.0,我最近遇到了一个关于类的私有成员序列化的问题 问题是,我尝试使用XMLSerializer序列化私有成员,我还尝试了SoapFormatter,它也无法序列化它们。 我希望以这两种格式之一进行序列化的唯一原因是我希望能够检查序列化的值 之后,我尝试了BinaryFormatter,它可以毫无问题地序列化私有成员 为什么是BinaryFormatter序列化私有成员,而不是XMLSerializer或SoapFormatter 我还想知道,BinaryFormatter如何能够访问类的私有成员 编

我最近遇到了一个关于类的私有成员序列化的问题

问题是,我尝试使用
XMLSerializer
序列化私有成员,我还尝试了
SoapFormatter
,它也无法序列化它们。 我希望以这两种格式之一进行序列化的唯一原因是我希望能够检查序列化的值

之后,我尝试了
BinaryFormatter
,它可以毫无问题地序列化私有成员

为什么是
BinaryFormatter
序列化私有成员,而不是
XMLSerializer
SoapFormatter

我还想知道,
BinaryFormatter
如何能够访问类的私有成员

编辑


第二个问题由反射来回答。

如何
X
访问私人成员几乎总是由“反射”来回答。完全信任代码可以访问和调用它想要的任何私有/内部成员。谢谢,看起来很有趣,我将研究这些机制。这只是一个设计选择。BinaryFormatter发挥了相当大的作用,它在不运行构造函数的情况下创建类的实例。这不是普通代码可以做的事情,这也是您必须使用[Serializable]属性来允许它这样做的核心原因。其他序列化程序使用这些规则。谢谢伙计们,可惜你们没有回答会有+1你们。我相信这是“设计”完成的。XML的目的是为不同的系统提供公共属性。例如,.Net到Java。XML是不同种类的框架、不同公司等之间的通信语言。为什么要序列化私有内容并向世界公开?但是,如果您想序列化仅在您的框架、应用程序中使用的内容,请确保序列化整个对象—没问题。