我想在Delphi中序列化一个Object,我正在使用新的RTTI.但是当我从存储中加载值时,它们将被转换为字符串,s和TRttiProperty.SetValue需要TValue作为第二个参数.因此,当我将声明为double的属性的值设置为'5.1'或'5'时,会引发异常
我也尝试使用TValue.From()方法没有成功.
这是一段代码,解释了出错的地方.
var P: TRttiProperty;
....
// P now is the property which is declared as a double or integer
P.SetValue(Self, '3'); //<-- this raises an exception.
Run Code Online (Sandbox Code Playgroud)
编辑:问题是如何使用字符串数据类型设置不是字符串类型的属性的值,但包含有效数据.(如上述情况)
是的,你试图将'3'(一个字符串)分配给一个数字属性.RTTI系统不执行隐式类型转换.尝试这样的事情:
procedure DeserializeProperty(P: TRttiProperty; s: string);
var
v: TValue;
begin
case p.PropertyType.TypeKind of
tkInteger: v := StrToInt(s);
tkFloat: v := StrToFloat(s);
tkString: v := s;
end;
p.SetValue(self, v);
end;
Run Code Online (Sandbox Code Playgroud)
这显然不是一个成品,但它应该足以让你开始.
| 归档时间: |
|
| 查看次数: |
1644 次 |
| 最近记录: |