使用私有成员序列化对象
当尝试序列化具有私有属性的对象时,开发人员可能会在使用默认 XMLSerializer 时遇到困难,因为它需要对所有序列化属性的公共访问。这个问题在问题中得到了演示,其中具有私有 Id 属性的对象由于其只读性质而无法序列化。
解决问题
要序列化对象私有成员,可以使用 DataContractSerializer。与 XMLSerializer 不同,它不需要公共访问,而是依赖于使用属性创建的数据协定。下面是使用 DataContractSerializer 的示例:
[DataContract] class MyObject { public MyObject(Guid id) { this.id = id; } [DataMember(Name="Id")] private Guid id; public Guid Id { get {return id;}} }
通过将 DataContract 属性添加到类并将 DataMember 属性添加到私有 Id 属性,我们可以指示 DataContractSerializer 处理其序列化。
var ser = new DataContractSerializer(typeof(MyObject)); var obj = new MyObject(Guid.NewGuid()); using(XmlWriter xw = XmlWriter.Create(Console.Out)) { ser.WriteObject(xw, obj); }
这种方法允许序列化具有私有属性的对象,而不会影响其封装性。需要注意的是,DataContractSerializer 不支持 XmlAttributes,而是支持 XmlElements。
或者,为了对序列化过程进行更精细的控制,请考虑实现 IXmlSerialized 接口。通过提供自定义 XML 序列化和反序列化方法,可以使用 XMLSerializer 实现更大的灵活性。
以上是如何在 C# 中序列化具有私有成员的对象?的详细内容。更多信息请关注PHP中文网其他相关文章!