C# 在C中对XmlSerializer的输出进行排序#
在中,我可以得到一个基于C#类生成的XML文件 我可以根据XML元素对其重新排序吗?我的代码使用C# 在C中对XmlSerializer的输出进行排序#,c#,xml,sorting,xml-serialization,C#,Xml,Sorting,Xml Serialization,在中,我可以得到一个基于C#类生成的XML文件 我可以根据XML元素对其重新排序吗?我的代码使用 var ser = new XmlSerializer(typeof(Module)); ser.Serialize(WriteFileStream, report, ns); WriteFileStream.Close(); 要获取XML文件,我需要根据BlocksCovered变量对XML文件进行排序 public class ClassInfo { public string Cla
var ser = new XmlSerializer(typeof(Module));
ser.Serialize(WriteFileStream, report, ns);
WriteFileStream.Close();
要获取XML文件,我需要根据BlocksCovered变量对XML文件进行排序
public class ClassInfo {
public string ClassName;
public int BlocksCovered;
public int BlocksNotCovered;
public double CoverageRate;
public ClassInfo() {}
public ClassInfo(string ClassName, int BlocksCovered, int BlocksNotCovered, double CoverageRate)
{
this.ClassName = ClassName;
this.BlocksCovered = BlocksCovered;
this.BlocksNotCovered = BlocksNotCovered;
this.CoverageRate = CoverageRate;
}
}
[XmlRoot("Module")]
public class Module {
[XmlElement("Class")]
public List<ClassInfo> ClassInfoList;
public int BlocksCovered;
public int BlocksNotCovered;
public string moduleName;
public Module()
{
ClassInfoList = new List<ClassInfo>();
BlocksCovered = 0;
BlocksNotCovered = 0;
moduleName = "";
}
}
Module report = new Module();
...
TextWriter WriteFileStream = new StreamWriter(xmlFileName);
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
var ser = new XmlSerializer(typeof(Module));
ser.Serialize(WriteFileStream, report, ns);
WriteFileStream.Close();
只要在序列化之前对列表进行排序,代码中就会显示您可以控制序列化-如果是这种情况,只需在序列化模块之前通过添加
sort()
方法对classinfo列表进行排序:
public class Module
{
public void Sort()
{
ClassInfoList = ClassInfoList.OrderBy( x=>x.BlocksCovered).ToList();
}
..
}
然后在序列化之前调用Sort():
report.Sort();
ser.Serialize(WriteFileStream, report, ns);
如果您无法控制类序列化的时间/方式,请让您的模块类实现IXmlSerializable
并在Serialize()
方法中进行排序-但后者更费力,应该避免。如果您的ClassInfoList
已经排序(正如您前面的问题所暗示的那样),XmlSerializer
生成的输出XML是否未排序?我会的surprised@BrokenGlass:ClassInfo列表根本没有排序,我需要从未排序的ClassInfo列表中获取已排序的输出。那么-为什么不在序列化之前对其进行排序?这将是最简单的解决方案。@Jon:not duplicate的可能副本OP希望对列表元素的内容进行排序,而不是对其classClassInfoList=ClassInfoList.OrderBy(x=>x.BlocksCovered).ToList()的元素进行排序;解决了这个问题。谢谢。@ProSeek:啊,是的,这是上一个解决方案中的复制粘贴遗漏,更新了答案-很高兴你抓住了它,如果我想按降序排序?应该更改什么?只需使用classinfo-list=classinfo.OrderByDescending(x=>x.BlocksCovered).ToList()代码>取而代之
report.Sort();
ser.Serialize(WriteFileStream, report, ns);