在C#中更改XmlSerializer生成的XML结构

我的课程如下

namespace Coverage { public class ClassInfo { public string ClassName; public int BlocksCovered; public int BlocksNotCovered; public ClassInfo() {} public ClassInfo(string ClassName, int BlocksCovered, int BlocksNotCovered) { this.ClassName = ClassName; this.BlocksCovered = BlocksCovered; this.BlocksNotCovered = BlocksNotCovered; } } public class Module { public List ClassInfoList; public int BlocksCovered; public int BlocksNotCovered; public string moduleName; public Module() { ClassInfoList = new List(); BlocksCovered = 0; BlocksNotCovered = 0; moduleName = ""; } 

使用以下序列化程序代码

 XmlSerializer SerializerObj = new XmlSerializer(typeof(Module)); // Create a new file stream to write the serialized object to a file TextWriter WriteFileStream = new StreamWriter(@"test.xml"); SerializerObj.Serialize(WriteFileStream, report); WriteFileStream.Close(); 

我可以获得以下XML文件。

     Fpga::TestMe 4 8   Fpga::TestMe2 4 8   8 16 helloclass.exe  
  • Q1:如何删除xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://...以使用简单元素..
  • Q2:XML元素名称与类名或变量名完全相同。 我可以用自己的替换吗?
  • Q3:我可以删除外部的吗?

例如,如何生成XML,如下所示:

    Fpga::TestMe 4 8   Fpga::TestMe2 4 8  8 16 helloclass.exe  

(顺便说一句,它与问题没有关系,但你应该以避免公共字段为目标,因为许多stackoverflow问题都涉及很多原因)

Q3:简单地说:

 [XmlElement("Class")] public List ClassInfoList; 

Q2成为顶级名称; 您可以使用

 [XmlRoot("somethingFun")] public class Module { ... } 

Q2重新成员名称:

 [XmlElement("blocks")] public int BlocksCovered; 

(另见[XmlAttribute(...)]

Q1删除xsi等可以使用XmlSerializerNamespaces完成:

 XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); var ser = new XmlSerializer(typeof(Module)); ser.Serialize(destination, module, ns);