C#将不同类型的xml数组反序列化为多个数组

Bum*_*per 5 c# xml xml-serialization xml-deserialization xmlserializer

我有以下xml:

<Applications>
    <AccessibleApplication></AccessibleApplication>
    <AccessibleApplication></AccessibleApplication>
    <EligibleApplication></EligibleApplication>
    <EligibleApplication></EligibleApplication>
</Applications>
Run Code Online (Sandbox Code Playgroud)

有没有办法将其反序列化为 C# 对象,以便 AccessibleApplications 和 EligibleApplications 是两个单独的数组?我尝试了以下但得到一个例外,因为“应用程序”被使用了不止一次。

[XmlArray("Applications")]
[XmlArrayItem("AccessibleApplication")]
public List<Application> AccessibleApplications { get; set; }

[XmlArray("Applications")]
[XmlArrayItem("EligibleApplication")]
public List<Application> EligibleApplications { get; set; }
Run Code Online (Sandbox Code Playgroud)

例外情况是:来自命名空间 '' 的 XML 元素 'Applications' 已经存在于当前作用域中。使用 XML 属性为元素指定另一个 XML 名称或命名空间。

这是可能的吗?

谢谢!

编辑:我忘了提到我不想仅仅为了为两个数组提供容器对象而拥有一个“应用程序”类。我有几种这样的情况,我不希望这些类的混乱,它们的唯一目的是拆分两个相同类型的数组。

我希望能够使用诸如 [XmlArrayItem="Application/AccessibleApplication"] 之类的某种标记将两个数组反序列化为外部对象,而无需创建“应用程序”类。

hev*_*900 1

我找到了一个相当巧妙的方法来做到这一点,首先创建一个这样的类:

using System.Xml.Serialization;

[XmlRoot]
public class Applications
{
    [XmlElement]
    public string[] AccessibleApplication;
    [XmlElement]
    public string[] EligibleApplication;
}
Run Code Online (Sandbox Code Playgroud)

请注意元素是如何成为单独的数组的。现在使用这个类(我将 XML 放在一个单独的文件中,因此是 XmlDocument 类)。

var doc = new XmlDocument();
doc.Load("../../Apps.xml");
var serializer = new XmlSerializer(typeof(Applications));
Applications result;

using (TextReader reader = new StringReader(doc.InnerXml))
{
    result = (Applications)serializer.Deserialize(reader);
}
Run Code Online (Sandbox Code Playgroud)

现在,为了证明这是有效的,您可以将所有内容写入控制台应用程序并执行 foreach 来打印数组中的所有值,如下所示:

foreach (var app in result.AccessibleApplication)
{
    Console.WriteLine(app);
}
foreach (var app in result.EligibleApplication)
{
    Console.WriteLine(app);
}
Run Code Online (Sandbox Code Playgroud)