如何使用 XmlSerializer 序列化 Type 类型

Oceanson 2008-12-25 12:25:47
如题

例如:
[Serializable]
Public Class ClassToBeSerialize
{
public Type AType
{set;get;}
}

[Serializable]
Public Class CustomerClass
{
Public string Name
{set;get;}
}

在代码段中调用
...
ClassToBeSerialize ctb = new ClassToBeSerialize();
ctb.AType = typeof(CustomerClass);
try
{
XmlSerializer serializer = new XmlSerializer(ctb.GetType(), new Type[] {CustomerClass}); 将序列化对象通知XmlSerializer ,但由于是Type类型的原因,依旧会抛类似要求打上【XmlInclude】的标签。
Stream stream = new FileStream(path, FileMode.Create);
using (XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8))
{
writer.Formatting = Formatting.Indented;
writer.Indentation = 4;
serializer.Serialize(writer, obj);
}
}
catch (Exception ex)
{
throw ex;
}
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Oceanson 2008-12-25
  • 打赏
  • 举报
回复
标黄段代码:
XmlSerializer serializer = new XmlSerializer(ctb.GetType(), new Type[] {CustomerClass});
yaazz 2008-12-25
  • 打赏
  • 举报
回复
可能要用到
derelictangel 2008-12-25
  • 打赏
  • 举报
回复
慢慢学习,帮顶,楼下的回答吧

PS:
我的目标是 ---->

^_^
gomoku 2008-12-25
  • 打赏
  • 举报
回复
ClassToBeSerialize.AType本身的类型是一个RuntimeType,typeof(CustomerClass)只是它的值。
不幸的是RuntimeType是一个内部的类,不被XmlSerializer认可。

倒是可以传输类型的全名,只是麻烦些,要手工做Xml系列化:


[Serializable]
public class ClassToBeSerialize : IXmlSerializable
{
public Type AType {set;get;}

//--------------------------------------------------------
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
if( reader.Read() && reader.IsStartElement("AType") )
{
string typeName = reader.ReadString();
this.AType = Type.GetType(typeName);
}
}
public void WriteXml(XmlWriter writer)
{
writer.WriteElementString("AType", this.AType == null ? "" : this.AType.FullName);
}
//-------------------------------------------------------
}


如果你怕麻烦,则可以保存类型的全名,而不是类型本身(类型可以由全名来重构):
public class ClassToBeSerialize
{
public string ATypeName {set;get;}
}
lc_mark 2008-12-25
  • 打赏
  • 举报
回复
泛型序列化不就行了,那么麻烦干什么?
hanyu0528 2008-12-25
  • 打赏
  • 举报
回复
学习+帮顶!!
king_博古 2008-12-25
  • 打赏
  • 举报
回复
不会,友情帮顶。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧