[英]Order different custom classes with XmlSerializer in same node
我有以下 XML 結構:
<TabHierarchy>
<Tab Name="Tab1"/>
<TabGroup Name="Group1">
<Tab Name="Tab2"/>
<Tab Name="Tab3"/>
<Tab Name="Tab4"/>
</TabGroup>
<Tab Name="Tab5"/>
<TabGroup Name="Group2">
<Tab Name="Tab6"/>
<TabGroup Name="Group3">
<Tab Name="Tab7"/>
<Tab Name="Tab8"/>
</TabGroup>
<Tab Name="Tab9"/>
</TabGroup>
<Tab Name="Tab10"/>
</TabHierarchy>
我的 C# 類:
public class XmlTabHierarchy
{
public XmlTabHierarchy()
{
Tab = new List<XmlTab>();
TabGroup = new List<XmlTabGroup>();
TabReport = new List<XmlReportTab>();
}
[XmlElement("Tab")] public List<XmlTab> Tab { get; set; }
[XmlElement("TabGroup")] public List<XmlTabGroup> TabGroup { get; set; }
[XmlElement("ReportTabs")] public List<XmlReportTab> TabReport { get; set; }
}
public class XmlTab
{
[XmlIgnore] public int Order { get; set; }
[XmlIgnore] public string Group { get; set; }
[XmlIgnore] public bool Use { get; set; }
[XmlIgnore] public bool ByUser { get; set; }
[XmlIgnore] public bool KeyTab { get; set; }
[XmlIgnore] public string Tab { get; set; }
[XmlAttribute("Name")] public string TabClean { get; set; }
[XmlAttribute("Alias")] public string Alias { get; set; }
[XmlIgnore] public string Type { get; set; }
[XmlIgnore] public bool Duplicate { get; set; }
}
public class XmlTabGroup
{
public XmlTabGroup()
{
Tab = new List<XmlTab>();
TabGroup = new List<XmlTabGroup>();
}
[XmlIgnore] public int Order { get; set; }
[XmlIgnore] public int GroupId { get; set; }
[XmlAttribute("Name")] public string Group { get; set; }
[XmlAttribute("Alias")] public string Alias { get; set; }
[XmlElement("Tab")] public List<XmlTab> Tab { get; set; }
[XmlElement("TabGroup")] public List<XmlTabGroup> TabGroup { get; set; }
}
我遇到的問題是,能夠正確地對它們進行排序。 如示例 XML 中所示,選項卡可以位於選項卡組之間。 ReportTabs 總是在最后。 這里有一篇帖子有類似的問題,但我不知道如何為我的項目實施它。 使用 XmlSerializer 反序列化和序列化 XML 時保持排序
XML 規范元素的順序不是必需的。 下面的代碼根據 XML 規范創建 XML。
using System;
using System.Linq;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApp2
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlTabHierarchy hierarchy = new XmlTabHierarchy()
{
Tab = new List<XmlTab>()
{
new XmlTab() { TabClean = "Tab1"},
new XmlTab() { TabClean = "Tab5"},
new XmlTab() { TabClean = "Tab10"}
},
TabGroup = new List<XmlTabGroup>()
{
new XmlTabGroup()
{
Group = "Group1",
Tab = new List<XmlTab>()
{
new XmlTab() { TabClean = "Tab2"},
new XmlTab() { TabClean = "Tab3"},
new XmlTab() { TabClean = "Tab4"}
}
},
new XmlTabGroup()
{
Group = "Group2",
Tab = new List<XmlTab>()
{
new XmlTab() { TabClean = "6" },
new XmlTab() { TabClean = "9"},
},
TabGroup = new List<XmlTabGroup>()
{
new XmlTabGroup()
{
Group = "Group3",
Tab = new List<XmlTab>()
{
new XmlTab() { TabClean = "Tab7"},
new XmlTab() { TabClean = "Tab8"}
}
}
}
}
}
};
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create(FILENAME, settings);
XmlSerializer serializer = new XmlSerializer(typeof(XmlTabHierarchy));
serializer.Serialize(writer, hierarchy);
}
}
public class XmlTabHierarchy
{
public XmlTabHierarchy()
{
Tab = new List<XmlTab>();
TabGroup = new List<XmlTabGroup>();
}
[XmlElement("Tab")]
public List<XmlTab> Tab { get; set; }
[XmlElement("TabGroup")]
public List<XmlTabGroup> TabGroup { get; set; }
}
public class XmlTab
{
[XmlAttribute("Name")]
public string TabClean { get; set; }
[XmlAttribute("Alias")]
public string Alias { get; set; }
}
public class XmlTabGroup
{
public XmlTabGroup()
{
Tab = new List<XmlTab>();
TabGroup = new List<XmlTabGroup>();
}
[XmlAttribute("Name")]
public string Group { get; set; }
[XmlAttribute("Alias")]
public string Alias { get; set; }
[XmlElement("Tab")]
public List<XmlTab> Tab { get; set; }
[XmlElement("TabGroup")]
public List<XmlTabGroup> TabGroup { get; set; }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.