📄 memberparser.cs
字号:
using System;
using System.Xml;
using System.Reflection;
using System.Diagnostics;
using System.ComponentModel;
using System.Collections;
namespace gowk.GXF
{
/// <summary>
/// PropertyAndFieldParser 的摘要说明。
/// </summary>
internal class MemberParser:XmlElementParserBase
{
public MemberParser():base()
{
}
public override bool CanParse(XmlNode context, ParserState state)
{
if((context.NodeType==XmlNodeType.Element) && (state.Parent!=null))
{
string name=context.Name;
MemberInfo mi=this.GetTypeMenberInfo(state.Parent.GetType(),name);
if(mi!=null)
{
state.Tag=mi;
return true;
}
}
return false;
}
public override object Parse(XmlNode context, ParserState state)
{
MemberInfo mi=(MemberInfo)state.Tag;
ObjectCreator co=ObjectCreator.Instance;
object value=co.MemberInvokers.GetValue(state.Parent,mi,state);
foreach(XmlAttribute nod in context.Attributes)
{
ParserState ps=new ParserState();
ps.Parent=value;
ps.Instance=state.Instance;
ps.MemberInitializer=state.MemberInitializer;
object o=co.XmlElementParsers.Parse(nod,ps);
}
foreach(XmlNode nod in context.ChildNodes)
{
if(nod.NodeType!=XmlNodeType.Element)continue;
ParserState s=new ParserState();
s.Instance=state.Instance;
s.Parent=value;
s.MemberInitializer=state.MemberInitializer;
co.XmlElementParsers.Parse(nod,s);
}
return null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -