【发布时间】:2013-05-15 00:26:22
【问题描述】:
在将动态 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 之类的值。
请提供您的意见。
【问题讨论】:
-
什么是“动态xml”?你试过吗? LinqToXml?
-
我不想关注 xml 内容,这一直在变化。我的数据模型也应该根据运行时的输入 xml 动态变化。
-
我已经尝试过 linq to Xml,我无法使用元素数组。例如:地址
-
为什么不使用 XPath 查询 (LINQ) XML? msdn.microsoft.com/en-us/library/bb387057.aspx
-
我个人看不出使用动态对象比定义一些类更好。如果/当数据源发生变化时,您无论如何都必须重构代码。如果你有类,那么使用重构工具更容易做到这一点。但这只是我的 2 美分。
标签: c# .net c#-4.0 dynamic expandoobject