首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ComponentSerializationService未反序列化所有属性

ComponentSerializationService未反序列化所有属性
EN

Stack Overflow用户
提问于 2016-03-01 19:54:38
回答 1查看 430关注 0票数 9

我使用的是找到的here的ComponentSerializationService:

当您从设计服务剪切控件时,将调用serialize方法;当您粘贴反序列化时,将调用serialize方法。

在我的例子中-我有一个简单的按钮,并且我改变了背景颜色。

Serialize看起来像这样:

代码语言:javascript
运行
复制
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;
      }

反序列化看起来像这样:

代码语言:javascript
运行
复制
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;
      }

我在两个方法中都设置了断点,传入的对象包含正确的背景属性,但一旦反序列化,该属性就不会持久化。

欢迎任何想法。这是一个很棘手的类,只有很少的代码示例或文档。

EN

回答 1

Stack Overflow用户

发布于 2016-05-24 16:49:49

您应该看看这个,看看SerializeAbsolute是否适合您:)

https://msdn.microsoft.com/en-us/library/system.componentmodel.design.serialization.componentserializationservice.serializeabsolute(v=vs.110).aspx

更具体地说,我引用这句话

通过Serialize方法实现的

标准序列化只序列化与组件的默认状态不同的值。这提供了最紧凑的序列化机制,但假设在反序列化期间将使用新创建的对象。如果使用现有对象,则不能保证生成的反序列化对象会复制序列化对象的原始状态;序列化期间包含默认值的属性在反序列化期间不会重置回其默认值。SerializeAbsolute方法不使用此快捷方式。它序列化源对象的所有属性,以便反序列化可以恢复对象的所有属性,而不管默认状态如何。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35722234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档