pro*_*eek 2 c# xml sorting xml-serialization
在这篇文章中,我可以得到一个基于 C# 类生成的 XML 文件。
我可以根据其元素对 XML 元素重新排序吗?我的代码使用
var ser = new XmlSerializer(typeof(Module));
ser.Serialize(WriteFileStream, report, ns);
WriteFileStream.Close();
Run Code Online (Sandbox Code Playgroud)
获取 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();
Run Code Online (Sandbox Code Playgroud)
public void Sort()
{
ClassInfoList = ClassInfoList.OrderBy( x=>x.CoverageRate).ToList();
}
Run Code Online (Sandbox Code Playgroud)
只需在序列化之前对列表进行排序,它就会出现在您可以控制序列化的代码中 - 如果是这种情况,只需ClassInfoList在序列化模块之前通过添加Sort()方法对列表进行排序:
public class Module
{
public void Sort()
{
ClassInfoList = ClassInfoList.OrderBy( x=>x.BlocksCovered).ToList();
}
..
}
Run Code Online (Sandbox Code Playgroud)
然后在序列化之前调用 Sort():
report.Sort();
ser.Serialize(WriteFileStream, report, ns);
Run Code Online (Sandbox Code Playgroud)
如果您无法控制何时/以及如何序列化您的类,请让您的 Module 类IXmlSerializable在您的Serialize()方法中实现和排序- 不过后者需要更多的努力,应该避免。
| 归档时间: |
|
| 查看次数: |
2124 次 |
| 最近记录: |