gpt4 book ai didi

c# - XmlSerializer 反序列化具有不同元素名称的列表

转载 作者:行者123 更新时间:2023-12-02 20:52:23 28 4
gpt4 key购买 nike

我正在尝试使用 XmlSerializer 解析具有如下所示元素的 XML。 amount 元素下有相当多的货币类型,我想将它们反序列化为一个对象集合,这些对象具有保存货币类型的字符串属性和保存金额的整数属性。

是否有任何干净的方法可以做到这一点,而无需自定义解析金额。我只想将 XmlSerializer 属性应用到我的类并获得有效的东西。

我无法控制输出 XML。

<root>
<property1>a</property1>
<property1>b</property1>
<property1>c</property1>
<amount>
<EUR type="integer">1000</EUR>
<USD type="integer">1100</USD>
</amount>
<root>

最佳答案

攻击 XML 反序列化的最佳方法是从序列化开始。为此,这里有一些属性为 control XML serialization 的类。 :

public sealed class root
{
[XmlElement("property1")]
public List<string> property1;

[XmlArrayItem(Type = typeof(EUR))]
[XmlArrayItem(Type = typeof(USD))]
public List<amount> amount;
}

public abstract class amount
{
[XmlAttribute]
public string type { get; set; }

[XmlText]
public string Value { get; set; }
}

public sealed class EUR : amount { }
public sealed class USD : amount { }

测试代码为:

        var root = new root { property1 = new List<string>(), amount = new List<amount>() };
root.property1.AddRange(new[]{ "a", "b", "c"});
var eur = new EUR { type = "integer", Value = "1000" };
var usd = new USD { type = "integer", Value = "1100" };
root.amount.AddRange(new amount[]{ eur, usd});

生成以下 XML:

<?xml version="1.0" encoding="utf-16"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<property1>a</property1>
<property1>b</property1>
<property1>c</property1>
<amount>
<EUR type="integer">1000</EUR>
<USD type="integer">1100</USD>
</amount>
</root>

关于c# - XmlSerializer 反序列化具有不同元素名称的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41816733/

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