gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:13:40 25 4
gpt4 key购买 nike

我有以下 xml:

<Applications>
<AccessibleApplication></AccessibleApplication>
<AccessibleApplication></AccessibleApplication>
<EligibleApplication></EligibleApplication>
<EligibleApplication></EligibleApplication>
</Applications>

有没有办法将其反序列化为 C# 对象,以便 AccessibleApplications 和 EligibleApplications 成为两个独立的数组?我尝试了以下操作但出现异常,因为“应用程序”被多次使用。

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

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

异常(exception)情况是:来自命名空间“”的 XML 元素“应用程序”已存在于当前范围内。使用 XML 属性为元素指定另一个 XML 名称或命名空间。

这可能吗?

谢谢!

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

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

最佳答案

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

using System.Xml.Serialization;

[XmlRoot]
public class Applications
{
[XmlElement]
public string[] AccessibleApplication;
[XmlElement]
public string[] EligibleApplication;
}

注意元素是如何成为单独的数组的。现在使用此类(我将 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);
}

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

foreach (var app in result.AccessibleApplication)
{
Console.WriteLine(app);
}
foreach (var app in result.EligibleApplication)
{
Console.WriteLine(app);
}

关于C#将不同类型的xml数组反序列化为多个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35049120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com