gpt4 book ai didi

c# - 带有属性的自定义 xml 序列化

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:46 25 4
gpt4 key购买 nike

有什么方法可以让 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 格式来自第 3 方,我正在努力使我们的对象有意义并且易于使用,同时仍保持其 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();
}
}

关于c# - 带有属性的自定义 xml 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8503814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com