gpt4 book ai didi

c# - 从动态 xml 转换为 C# 对象

转载 作者:太空狗 更新时间:2023-10-29 21:02:02 24 4
gpt4 key购买 nike

我需要将动态 xml 转换为定义的 C# 对象模型的输入

我的示例 xml 如下:

<?xml version="1.0" encoding="utf-8" ?>
<Persons>
<Person>
<Id>10</Id>
<FirstName> Dino </FirstName>
<LastName> Esposito </LastName>
<Addresses>
<Address>
<AddressType>BillTo</AddressType>
<Street1></Street1>
<Street2></Street2>
<Street3></Street3>
<City>Moscow</City>
</Address>
<Address>
<AddressType>ShipTo</AddressType>
<Street1></Street1>
<Street2></Street2>
<Street3></Street3>
<City>Moscow</City>
</Address>
<Address>
<AddressType>Contact</AddressType>
<Street1></Street1>
<Street2></Street2>
<Street3></Street3>
<City>Moscow</City>
</Address>
</Addresses>
</Person>
</Persons>

我希望在运行时将此 xml 的值转换为 C# 对象。我希望定义一个类似于以下内容的对象:我的预期类对象 C# 如下所示:

public class Person
{
public int Id { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public IList<Address> Addresses { get; set; }
}

public class Address
{
public string AddressType { get; set; }
public string Street1 { get; set; }
public string Street2 { get; set; }
public string Street3 { get; set; }
public string City { get; set; }
}

我在 C# 4.0 中使用了 dynamic 和 ExpandoObject,这种方法允许我使用键动态获取值。我不知道如何将这些填充到我的数据模型中。

注意:我不想定义这个类模型结构,它会随着时间的推移不断变化。我正在寻找一种解决方案,它可以让我获得像 DynamicObject.Addresses.Address[0].City 这样的值。

请提供您的意见。

最佳答案

使用 LINQ2XML 的解决方案看起来像这样(不需要类):

var xml = XDocument.Parse(xmlSrc); // from XML string, e.g.: <xml ...><Persons><Person>...
//var xml = XDocument.Load(xmlFile); // from XML file, e.g.: c:\temp\persons.xml

var persons = xml.Root.Elements("Person").ToList();
var p1Addresses = persons[0].Elements("Addresses").ToList();
foreach (var address in p1Addresses.Elements("Address"))
{
var elementAddress = address.Element("AddressType");
var elementCity = address.Element("City");
System.Console.WriteLine(string.Format("{0} - {1}", elementAddress.Value, elementCity.Value));
}

输出是:

BillTo - Moscow
ShipTo - Moscow
Contact - Moscow

关于c# - 从动态 xml 转换为 C# 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16649642/

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