带有属性的自定义XML序列化
本文关键字:XML 序列化 自定义 属性 | 更新日期: 2023-09-27 18:17:54
是否有办法让xml序列化器转换以下内容:
class Mail
{
public string Subject = "sub1";
}
转换成以下XML模式:
<Mail>
<MailSubject>
<Subject>sub1</Subject>
</MailSubject>
</Mail>
也就是说,我想将xmlElement包装在一个新的xmlElement组中,而不使用以下子类:
class Mail
{
public MailSubject MailSubject = new MailSubject();
}
class MailSubject
{
public string Subject = "sub1";
}
我的xml格式来自第三方,我试图使它使我们的对象是有意义的,很容易使用,同时仍然保持他们的xml模式
正如Buh Buh所说,实现这一点的唯一方法是实现IXmlSerializable。一个可能的实现是这样的:
public class Mail : IXmlSerializable
{
public string Subject;
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(System.Xml.XmlReader reader)
{
bool isEmpty = reader.IsEmptyElement;
reader.ReadStartElement();
if (isEmpty) return;
isEmpty = reader.IsEmptyElement;
reader.ReadStartElement();
if (isEmpty)
{
reader.ReadEndElement();
return;
}
Subject = reader.ReadString();
reader.ReadEndElement();
reader.ReadEndElement();
}
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteStartElement("MailSubject");
writer.WriteElementString("Subject", Subject);
writer.WriteEndElement();
}
}
如果你让Mail
实现IXmlSerializable
,那么你可以有任何你喜欢的xml。但是这可能会产生比您真正想要做的更多的工作。