IXmlSerializable 实现

IXmlSerializable 实现

#region IXmlSerializable 成员
public static MetaEntity Load(string path)
{
using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
XmlSerializer serializer
= new XmlSerializer(typeof(MetaEntity));
return (MetaEntity)serializer.Deserialize(stream);
}
}

public void Save(string path)
{
using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write))
{
XmlSerializer serializer
= new XmlSerializer(this.GetType());
serializer.Serialize(stream,
this);
}
}

public System.Xml.Schema.XmlSchema GetSchema()
{
throw new NotSupportedException();
}

public void ReadXml(XmlReader reader)
{
lock (stored)
{
this.MappedName = reader.GetAttribute("name");
string spName, typeQualifiedName, propertyQualifiedName;
BindingFlags bingdingFlags
= BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty;
if (reader.ReadToDescendant("storedProcedure"))
{
do
{
spName
= reader.GetAttribute("name");
List
<TypeConverter> typeList = new List<TypeConverter>();
if (reader.ReadToDescendant("converter"))
{
do
{
TypeConverter type
= new TypeConverter(Type.GetType(typeQualifiedName = reader.GetAttribute("qualifiedName")));
if (reader.ReadToDescendant("add"))
{
do
{
PropertyConverter property
= new PropertyConverter(reader.GetAttribute("name"), bool.Parse(reader.GetAttribute("nullable")), type.EntityType.GetProperty(propertyQualifiedName = reader.GetAttribute("qualifiedName"), bingdingFlags));
if (property.EntityProperty == null)
{
throw new MappingException(propertyQualifiedName);
}
type.Add(property);
}
while (reader.ReadToNextSibling("add"));
}
typeList.Add(type);
}
while (reader.ReadToNextSibling("converter"));
}
stored.Add(spName, typeList);
}
while (reader.ReadToNextSibling("storedProcedure"));
}
}
}

public void WriteXml(XmlWriter writer)
{
lock (stored)
{
writer.WriteAttributeString(
"name", this.MappedName);
ArrayList spNameList
= new ArrayList(stored.Keys);
spNameList.Sort();
foreach (string spName in spNameList)
{
List
<TypeConverter> list = (List<TypeConverter>)stored[spName];
lock (list)
{
writer.WriteStartElement(
"storedProcedure");
writer.WriteAttributeString(
"name", spName);
foreach (TypeConverter typeConverter in list)
{
writer.WriteStartElement(
"converter");
writer.WriteAttributeString(
"qualifiedName", typeConverter.EntityType.AssemblyQualifiedName);
foreach (PropertyConverter propertyConverter in typeConverter)
{
writer.WriteStartElement(
"add");
writer.WriteAttributeString(
"name", propertyConverter.MappedName);
writer.WriteAttributeString(
"nullable", propertyConverter.IsNullable.ToString());
writer.WriteAttributeString(
"qualifiedName", propertyConverter.EntityProperty.Name);
writer.WriteEndElement();
}
writer.WriteEndElement();
}
writer.WriteEndElement();
}
}
}
}
#endregion

  

posted on 2011-08-04 18:19 RockyLOMO 阅读(...) 评论(...) 编辑 收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值