【发布时间】:2022-01-21 21:01:25
【问题描述】:
我正在开发一个 C# 程序,我正在尝试序列化 XML。
我有以下标签:
using System.Xml.Serialization;
...
[XmlElement("MV")]
public MultiVerse MultiVerse { get; set; }
当我不填写这个值时,标签<MV>不存在,但我想在这种情况下获得标签<MV/>:
目前我有<HM><ID>Some_ID</ID></HM>。
我想要<HM><ID>Some_ID</ID><MV/></HM>。
我已经尝试在前面加上[Required],但这没有用,我认为填写IsNullable 属性是个好方法。
Edit1,经过网上调查
网上有不少关于修改XmlWriter的建议,但在我的项目中,整个序列化是这样完成的:
public override string ToString()
{
...
using (var stream = new StringWriter())
using (var writer = XmlWriter.Create(stream, settings))
{
var serializer = new XmlSerializer(base.GetType());
serializer.Serialize(writer, this, ns);
return stream.ToString();
}
...
}
如您所见,这太笼统了,我不想在这里做任何修改,因此我正在寻找一种方法来自定义 [XmlElement] 指令。
Edit2:XmlWriter 设置:XmlWriter settings 如下所示:
// Remove Declaration
var settings = new XmlWriterSettings
{
Indent = false,
OmitXmlDeclaration = true,
NewLineHandling = NewLineHandling.None,
NewLineOnAttributes = false,
};
有人有想法吗?
提前致谢
【问题讨论】:
-
MultiVerse类的外观如何? -
MultiVerse类是另一个类,具有一些属性,其中一些还具有[XmlElement()]指令,但整个类可以是null,而后者是我的情况有兴趣。 -
其实我有一大堆类,互相引用。 XML 序列化器把它变成了一堆嵌套的 XML,这是正确的。经常发生其中一个对象是
null,然后这在生成的 XML 中不可见,这很好。但是,对于那个类,MultiVerse类,我希望看到一个条目,它可以采用自闭合标签的形式。
标签: c# xml serialization xml-serialization