【问题标题】:XML Serialization – serialize the properties in user controlXML序列化——序列化用户控件中的属性
【发布时间】:2013-03-31 15:49:43
【问题描述】:

如何序列化用户控件中的属性?

我尝试了以下代码,但在创建 XmlSerializer 对象时遇到了 InvalidOperationExceptio

MyUserControl userControl = new MyUserControl();
XmlSerializer serializer = new XmlSerializer(typeof(MyUserControl));
Stream stream = new MemoryStream();
TextWriter writer = new StreamWriter(stream);
serializer.Serialize(writer, userControl);   

例外:

System.InvalidOperationException 未处理

HResult=-2146233079

Message=反映类型“Demo.MyUserControl”时出现错误。

【问题讨论】:

  • 对于类似的问题,我将控件数据绑定到一个类,然后对其进行序列化,您是在谈论数据绑定属性,例如用户控件名称或自定义属性/值吗?

标签: c# wpf xml serialization user-controls


【解决方案1】:

恕我直言,你不应该这样做。

您应该编写一个单独的“数据传输对象 (DTO)”样式类来保存您想要序列化的数据,并改用 that。 (当然,您需要编写 Transform 方法来来回转换数据。)

否则,您会将数据存储格式与用户控件紧密结合。

如果您使用单独的类进行序列化,它将使其更易于管理和灵活,特别是如果您将来需要添加新属性。

如果你真的必须序列化用户控件(我强烈建议你不要)你可以尝试使用DataContract serialization,它有一个“选择加入” " 属性被序列化的机制,而不是旧序列化的“选择退出”机制。

【讨论】:

  • DataContract 序列化并不能解决问题,因为 UserControl 既没有标记为 Serializable 也没有标记为 DataContract,因此任何派生类型都不能使用 DataContractSerializer 序列化。
猜你喜欢
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 2011-10-07
  • 2015-10-24
  • 1970-01-01
相关资源
最近更新 更多