Spo*_*d22 2 c# xml linq settings visual-studio-2010
我试图XDocument在VS2010的设置窗格中输入一个没有成功.类型是System.Xml.Linq.XDocument
我收到的消息是:
无法转换为'System.Xml.Linq.XDocument'类型的实例
有没有人知道这方面的方法?
ST
您不能创建一个XDocument直接设置,因为XDocument类不符合标准使用的设置,以确定是否可以使用类型:
应用程序设置可以存储为XML可序列化的任何数据类型,或者具有实现ToString/FromString的TypeConverter.最常见的类型为字符串,整数,和布尔,但你也可以值存储为彩色,对象,或作为连接字符串.
XDocument提供了一种通过解析字符串来创建XML文档的方法,但它不是构造函数,它是静态Load方法(它采用a TextWriter而不是字符串).因此它不适合在"设置"中使用.
但是您可以将其子类化,并为子类提供类型转换器.幸运的是,XDocument使用类型转换器进行子类化非常容易.首先,创建一个子类:
[TypeConverter(typeof(MyXDocumentTypeConverter))]
public class MyXDocument : XDocument
{
}
Run Code Online (Sandbox Code Playgroud)
那个班级用这个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;
}
}
Run Code Online (Sandbox Code Playgroud)
完成此设置后,您可以编写如下代码:
MyXDocument d = "<foo/>";
Run Code Online (Sandbox Code Playgroud)
并且字符串<foo/>将被传递到类型转换器并解析(通过Load)到一个XDocument,其顶级元素然后被添加到MyXDocument.这与自动生成的代码Settings.Designer.cs使用的分配相同:
return ((global::XmlSettingsDemo.MyXDocument)(this["Setting"]));
Run Code Online (Sandbox Code Playgroud)
现在,您可以进入"设置"对话框并创建此类型的设置.您无法导航到"类型"对话框中的类型; 你必须手动输入类型的全名(XmlSettingsDemo.MyXDocument是我的名字).
| 归档时间: |
|
| 查看次数: |
716 次 |
| 最近记录: |