假设我将此XML作为字符串:
<calles>
<calle>
<nombre>CALLAO AV.</nombre>
<altura>1500</altura>
<longitud>-58.3918617027</longitud>
<latitud>-34.5916734896</latitud>
<barrio>Recoleta</barrio>
</calle>
</calles>
并且创建了我创建的Type I来映射XML:
public class Ubicacion
{
public string Latitud { get; set; }
public string Longitud { get; set; }
public string Nombre { get; set; }
public string Altura { get; set; }
public string Barrio { get; set; }
public Ubicacion() { }
}
我需要获取该XML文件并使用这些值创建一个对象...
有人知道快速的方法吗?用C#?我一直在尝试,但根本没有工作......
XElement dir = XElement.Parse(text);
Ubicacion informacion = from d in dir.Elements("calle").
select new Ubicacion
{
Longitud = d.Element("longitud").Value,
Latitud = d.Element("latitud").Value,
Altura = d.Element("altura").Value,
Nombre = d.Element("nombre").Value,
Barrio = d.Element("barrio").Value,
};
return informacion.Cast<Ubicacion>();
有什么想法吗?
答案 0 :(得分:5)
你试过这个吗?
XElement dir = XElement.Parse(text);
var informacion = from d in dir.Elements("calle").
select new Ubicacion
{
Longitud = d.Element("longitud").Value,
Latitud = d.Element("latitud").Value,
Altura = d.Element("altura").Value,
Nombre = d.Element("nombre").Value,
Barrio = d.Element("barrio").Value,
}.ToList();
请记住,在遍历它之前不会执行LINQ查询。 .ToList()
扩展方法会为您执行此操作。然后它将生成List<Ubicacion>
集合。
答案 1 :(得分:3)
这样做的一种方法是:
xsd.exe
运行您的data.xml两次 - 首先使用xsd.exe (filename).xml
,这将为您的XML文件生成具有相同名称和.xsd
文件扩展名xsd.exe /c (filename).xsd
将生成与您的XML 设置AutoMapper以轻松将生成/反序列化的类映射到目标类型的实例 - 因为两种类型都具有相同的属性名称,所以设置AutoMapper是一件轻而易举的事:
Mapper.CreateMap<Deserialized, Ubicacion>();
Ubicacion target = Mapper.Map<Deserialized, Ubicacion>(your-deserialized-instance);
这就是要做的一切!
根据您需要执行此操作的次数,这可能比手动将XML解析为碎片并基于该解析组装新对象实例更简单。