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

本文关键字:转换 GUID XElement 何使用 System Type | 更新日期: 2023-09-27 18:28:28

例如,我有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)。希望有人能理解我的问题:)

有办法做到这一点吗?非常感谢。

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

XElement DOM不支持将属性或主体绑定到特定类型。它永远是一根绳子。

假设您提供的只是一个简化的示例,下面的内容可能会在更复杂的场景中对您有所帮助。

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

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