C# 在C中对XmlSerializer的输出进行排序#

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

在中,我可以得到一个基于C#类生成的XML文件

我可以根据XML元素对其重新排序吗?我的代码使用

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