首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

熟新的RTTI的来,帮小弟我解决一下这个有关问题,多谢了

2012-02-27 
熟新的RTTI的来,帮我解决一下这个问题,谢谢了procedure TXmlReflector.LoadFromXmlNode(ANode:IXMLNode)v

熟新的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
回复内容太短了!
[解决办法]
来接分的。

热点排行