有一个 XML 文件:
<ValCurs Date="01.05.2021" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>58,1546</Value>
</Valute>
<Valute ID="R01020A">
<NumCode>944</NumCode>
<CharCode>AZN</CharCode>
<Nominal>1</Nominal>
<Name>Азербайджанский манат</Name>
<Value>44,0524</Value>
</Valute>
<Valute ID="R01035">
<NumCode>826</NumCode>
<CharCode>GBP</CharCode>
<Nominal>1</Nominal>
<Name>Фунт стерлингов Соединенного королевства</Name>
<Value>104,1694</Value>
</Valute>
<Valute ID="R01060">
<NumCode>051</NumCode>
<CharCode>AMD</CharCode>
<Nominal>100</Nominal>
<Name>Армянских драмов</Name>
<Value>14,3761</Value>
</Valute>
</ValCurs>
http://www.cbr.ru/scripts/XML_daily.asp XML 取自该资源。
问题是反序列化 XML 文件。这是要在 Main 中检查的类和输出信息的示例。
它目前给出一个错误
InvalidOperationException: ValCurs xmlns='' 不是预期的。
澄清:我正在使用.Netcore 3.1
[Serializable()]
[XmlRoot(ElementName = "ValCurs")]
class CurrencyClass
{
[XmlElement(ElementName = "Valute")]
public List<Valute> Valutes { get; set; }
}
[Serializable()]
class Valute
{
[XmlAttribute(AttributeName = "ID")]
public string ID { get; set; }
[XmlElement(ElementName = "NumCode")]
public string NumCode { get; set; }
[XmlElement(ElementName = "CharCode")]
public string CharCode { get; set; }
[XmlElement(ElementName = "Nominal")]
public string Nominal { get; set; }
[XmlElement(ElementName = "Name")]
public string Name { get; set; }
[XmlElement(ElementName = "Value")]
public string Value { get; set; }
}
static void Main(string[] args)
{
var formatter = new XmlSerializer(typeof(DocumentClass));
using (FileStream fs = new FileStream(@"D:\repositivs\ConsoleApp1\CurValute.xml", FileMode.Open))
{
var currencyTest = (CurrencyClass)formatter.Deserialize(fs);
Console.WriteLine("Объект десериализован");
foreach (Valute valute in currencyTest.Valutes)
{
Console.WriteLine("ID: {0}", valute.ID[0]);
Console.WriteLine("Name: {0} ", valute.Name);
Console.WriteLine("Nominal: {0}", valute.Nominal);
Console.WriteLine("Value: {0} ", valute.Value);
}
}
}
另外,曾尝试使用 XmlReader,但未成功。
您也可以在工作室中使用 PasteSpecial->XML 作为类,会有类似的东西,只是稍微冗长一些。
2.
线路本身