如何使用System.Type将XElement强制转换为GUID?

时间:2015-12-30 18:10:50

标签: c# xml-parsing linq-to-xml

例如,我的XElement看起来像这样:

<Id>5E64F866-823E-4B2F-AE7D-D780444011E9</Id>

我需要将其转换为System.Guid。我知道我可以使用显式转换来做到这一点:

var xElem = xElement.Parse("<Id>5E64F866-823E-4B2F-AE7D-D780444011E9</Id>");
var myGuid = (Guid)xElem;

但我真正需要的是:

var guidType = typeof(Guid);
var xElem = xElement.Parse("<Id>5E64F866-823E-4B2F-AE7D-D780444011E9</Id>");
var myGuid = xElem.ConvertToObject(guidType); // for example, pseudo method

我在代码中使用了反射,我需要能够使用propertyInfo.SetValue(object,object)为属性设置值。我为属性设置的值的可能类型始终是XElement显式转换支持类型之一(msdn)。希望有人理解我的问题:)

有办法做到这一点吗?谢谢!

1 个答案:

答案 0 :(得分:0)

XElement DOM不支持将绑定属性或主体绑定到特定类型。它总是一个字符串。

假设您提供的内容只是一个简化的示例,下面的内容可能会帮助您在更复杂的情况下使用。

IEnumerable<Guid> ids = from e in d.Root.Elements()
                        where e.Name == (ns + "employee")
                        select new Guid(e.Attribute("Id").Value);

或者您可以为XElement设计一个扩展方法,该方法将查看传递的类型是否具有通过反射接收字符串并调用它的构造函数。但这有点复杂。