在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);