序列化具有特殊格式需求的xml

时间:2017-09-01 10:04:36

标签: c# xml xsd formatting xmlserializer

我有一个类MyType,它是由xsd.exe工具从xsd模式文件自动生成的。我想将MyType对象序列化为文件,我对格式化有一些特殊需求。目前我正在使用XmlWriter:

XmlSerializer serializer = new XmlSerializer(typeof(MyType));
MyType data = new MyType(...); // fill data
string myFile = "C:\myFile.xml";
using (XmlWriter wr = XmlWriter.Create(myFile))
{
    serializer.Serialize(wr, data, new XmlSerializerNamespaces(new XmlQualifiedName[] { new XmlQualifiedName("", "") }));
    // The XmlSerializerNamespaces is needed because I don't want any namespace attributes in the xml.
}

我以为我可以向XmlWriterSettings输入一些XmlWriter.Create,但我不知道他们是否可以做我想要的。我在MSDN文档中找不到有关我的需求的任何有用设置。

这些是我的需求:

  1. 如果元素elem为空,我想将<elem></elem>作为输出。目前我得到<elem />
  2. 如果属性具有其默认值(如xsd中所定义,如:<xs:attribute default="defaulValue" name="attributeName">),则仍应编写该属性。目前它被省略了。例如。而不是<elem>...</elem>,省略了属性,我想要<elem attributeName="defaultValue">...</elem>
  3. 序言必须包含encoding="UTF-8"(带大写字母)。目前它包含encoding="utf-8"(小写字母)。
  4. 有关如何使用XmlSerializer使用所需格式将数据序列化为xml的任何提示?

    我不以任何方式依附于XmlWriter;我只需要在序言中加入encoding条目,而XmlWriter附带它。

    哦,我不想修改xsd生成的代码,因为我不得不每隔一段时间重新生成它(只要xsd架构发生变化)。

0 个答案:

没有答案