
Exception class EPropertyConvertError with message ‘InvalID property type: TSomething’
因为我刚学这个,所以我不确定是什么问题.我确实有一些猜测,其中一个是TSomething = Class可能必须拥有它自己的序列化方法?在那种情况下,这甚至会如何工作(因为即使我不相信这个假设)?另一个是我从delphi.about.com借来的代码无法处理这些类型的属性?如果是这样,我怎么能改进它?如果我的猜测都不正确,那么如何才能使这项工作成功呢? (我正在使用DelphiXE2.)
根据要求编码:
TSomething = Classprotected fNumber: integer; fline: string;public procedure Assign(Source: TObject);published property Number: integer read fNumber write fNumber; property line: string read fline write fline;End;TOther = Classpublic procedure LoadFromStream(const Stream: TMemoryStream); procedure SavetoStream(const Stream: TMemoryStream); constructor Create; virtual; destructor Destroy; overrIDe;protected fSomething: TSomething; procedure SetfSmth(AValue: TSomething);published property Something: TSomething read fSomething write SetfSomething;end;
这些方法的实现是从上面提供的两个链接中借用的,我认为没有必要重新输入,除非被要求.
解决方法 要序列化TSomething,它必须是子组件.要做到这一点,你必须改变一件事:不要从TObject派生两个类,而是从TComponent派生.然后在你调用的TSomething构造函数中Self.SetSubComponent(True);
最后,由于您的类是TComponent,您将不再需要从delphi.about中获取的东西,因为TComponent可以通过使用WriteComponent / ReadComponent在TStream中直接序列化
选择正确的后代时,你会发现这个过程比较简单.这里的选择是逻辑:如果你想序列化,那么使用TComponent.
总结以上是内存溢出为你收集整理的如何在delphi中反序列化子属性?全部内容,希望文章能够帮你解决如何在delphi中反序列化子属性?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)