组件序列化服务不反序列化所有属性
本文关键字:属性 反序列化 序列化 服务 组件 | 更新日期: 2023-09-27 18:36:48
我正在使用ComponentSerializationService,如下所示:
从设计服务剪切控件时,将调用序列化方法,粘贴反序列化时将调用该方法。
在我的示例中 - 我有一个简单的按钮,我已经更改了背景颜色。
序列化看起来像这样:
public object Serialize(ICollection objects)
{
var serializationService = _serviceProvider.GetService(typeof(ComponentSerializationService)) as ComponentSerializationService;
if (serializationService == null)
{
throw new Exception("ComponentSerializationService not found");
}
SerializationStore returnObject;
using (var serializationStore = serializationService.CreateStore())
{
foreach (object obj in objects)
{
if (obj is Control)
{
serializationService.Serialize(serializationStore, obj);
}
}
returnObject = serializationStore;
}
return returnObject;
}
反序列化看起来像这样:
public ICollection Deserialize(object serializationData)
{
var serializationStore = serializationData as SerializationStore;
if (serializationStore == null)
{
return new object[] {};
}
var componentSerializationService = _serviceProvider.GetService(typeof(ComponentSerializationService)) as ComponentSerializationService;
if (componentSerializationService == null)
{
throw new Exception("ComponentSerializationService not found");
}
var collection = componentSerializationService.Deserialize(serializationStore);
return collection;
}
我在两个方法中都设置了断点,并且传入对象包含正确的后台属性,但是一旦反序列化,该属性就不会持久化。
欢迎任何想法。这是一个棘手的类,代码示例或文档行中很少。
你应该看看这个,看看 SerializeAbsolute 是否适合你:)
https://msdn.microsoft.com/en-us/library/system.componentmodel.design.serialization.componentserializationservice.serializeabsolute(v=vs.110).aspx
更具体地说,评论和我引用
通过序列化方法实现的标准序列化, 仅序列化与组件的默认状态不同的值。 这提供了最紧凑的序列化机制,但假设 新创建的对象将在反序列化期间使用。如果 使用现有对象,但生成的反序列化对象不是 保证复制序列化对象的原始状态; 序列化期间包含默认值的属性将 在反序列化期间不会重置回其默认值。这 SerializeAbsolute 方法不使用此快捷方式。它序列化所有 源对象的属性,以便反序列化可以还原 对象的所有属性,而不考虑默认状态。