读书人

熟新的RTTI的来帮小弟我解决一下这个

发布时间: 2012-02-27 10:00:22 作者: rapoo

熟新的RTTI的来,帮我解决一下这个问题,谢谢了
procedure TXmlReflector.LoadFromXmlNode(ANode:IXMLNode);
var
Context: TRttiContext;
rttiType,tmpType: TRttiType;
Prop: TRttiProperty;
value:TValue;
AType:PTypeInfo;
tmpNode,subNode:IXMLNode;
AList:TList;
Obj:TObject;
begin
Context := TRttiContext.Create;
try
rttiType := Context.GetType(ClassType);
if ANode.HasChildNodes then
begin
tmpNode:=ANode.ChildNodes.First;
while Assigned(tmpNode) do
begin
prop:=rttiType.GetProperty(tmpNode.NodeName);
if tmpNode.IsTextElement then
begin
if Prop.PropertyType.TypeKind in [tkInteger,tkInt64] then
begin
AType:=TypeInfo(Int64);
value:=TValue.FromOrdinal(AType,StrToInt64Def(tmpNode.Text,0));
end else if Prop.PropertyType.TypeKind in [tkChar,tkString,tkWChar,tkLString,tkWString,tkUString,tkVariant] then
begin
value:=tmpNode.Text;
end else if Prop.PropertyType.TypeKind in [tkFloat] then//日期,浮点数
begin
value:=StrToFloatDef(tmpNode.Text,0.0);
end;
Prop.SetValue(Self,value);
end else //TList
begin
if (tmpNode.HasChildNodes)and(prop.PropertyType.Name='TList') then
begin
AList:=TList.Create;
value:=AList;
Prop.SetValue(Self,value);
subNode:=tmpNode.ChildNodes.First;
while Assigned(subNode) do
begin
//谁帮我搞定这里,我现在只能用一个TDictionary来实现类的创建
Obj:=TypeDict.Items[subNode.NodeName].Create;
AList.Add(Obj);
TXmlReflector(Obj).LoadFromXmlNode(subNode);
subNode:=subNode.NextSibling;
end;

end;
end;
tmpNode:=tmpNode.NextSibling;
end;
end;
finally
Context.Free;
end;
end;

[解决办法]
我来。。。。。
[解决办法]
JF
回复内容太短了!
[解决办法]
来接分的。

读书人网 >.NET

热点推荐