我试图在VS2010的设置面板中输入XDocument
但没有成功。类型为System.Xml.Linq.XDocument
我得到的信息是:
无法转换为类型的实例 'System.Xml.Linq.XDocument'
有没有人知道解决这个问题?
ST
答案 0 :(得分:5)
您无法直接创建XDocument
设置,因为XDocument
类不符合设置使用的criteria以确定是否可以使用类型:
应用程序设置可以存储为XML可序列化的任何数据类型,或者具有实现ToString / FromString的TypeConverter。最常见的类型是String,Integer和Boolean,但您也可以将值存储为Color,Object或连接字符串。
XDocument
提供了一种通过解析字符串来创建XML文档的方法,但它不是构造函数,它是静态Load
方法(它采用TextWriter
,而不是字符串) 。因此它不适合在“设置”中使用。
但是您可以将其子类化,并为子类提供类型转换器。幸运的是,使用类型转换器将XDocument
子类化很容易。首先,创建一个子类:
[TypeConverter(typeof(MyXDocumentTypeConverter))]
public class MyXDocument : XDocument
{
}
该课程使用此TypeConverter
:
public class MyXDocumentTypeConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
return (sourceType == typeof (string));
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value is string)
{
MyXDocument d = new MyXDocument();
d.Add(XDocument.Load(new StringReader((string) value)).Elements().First());
return d;
}
return null;
}
}
完成此设置后,您可以编写如下代码:
MyXDocument d = "<foo/>";
并且字符串<foo/>
将被传递到类型转换器并被解析(通过Load
)到XDocument
,其顶级元素将被添加到MyXDocument
}。这与Settings.Designer.cs
中自动生成的代码使用的分配相同:
return ((global::XmlSettingsDemo.MyXDocument)(this["Setting"]));
现在,您可以进入“设置”对话框并创建此类型的设置。您无法导航到“类型”对话框中的类型;你必须手动输入类型的全名(XmlSettingsDemo.MyXDocument
是我的名字)。