我正在编写自定义配置文件提供程序,并且必须处理来自WCF的数据。现在基本上我的Profile Provider通过WCF与另一个Profile Provider建立了桥梁,我正在实现GetPropertyValues
。由于SettingsPropertyCollection
无法序列化,因此我创建了一个简单的自定义类来传达我想要的配置文件属性:
[DataContract]
public class ProfileKey
{
public ProfileKey()
{
}
public ProfileKey(string name, string type)
{
Name = name;
Type = type;
}
[DataMember]
public string Name { get; set; }
[DataMember]
public string Type { get; set; }
}
因此,要获取配置文件值,我将发送ProfileKeys列表,而SettingsProperty具有2个重要属性,以从WCF服务后面使用的标准SqlProfileProvider
获取配置文件属性:名称和类型。必须在WCF端自己构建SettingsPropertyCollection似乎没有这样的问题:
SettingsPropertyCollection properties = new SettingsPropertyCollection();
foreach (ProfileKey key in collection)
{
properties.Add(new SettingsProperty(key.Name) { PropertyType = Type.GetType(key.Type) });
}
令我惊讶的是,上面的代码无效!经过大量的实验,我发现只有在我使用typeof(string)
时它才有效。大惊小怪,我在即时窗口中运行了以下内容:typeof(string) == Type.GetType("System.String")
,结果确实是true
?
所以我的问题是typeof(string)
和Type.GetType("System.String")
之间的区别是什么?如果它们确实相等,为什么SqlProfileProvider
在使用时没有返回我的值后来吗
另一个问题可能类似:Type Checking: typeof, GetType, or is?
但是,目前的问题不是关于typeof vs GetType的性能,the other question的答案也没有回答为什么typeof(string) == GetType("System.String")
导致TRUE而SqlProfileProvider只适用于typeof(字符串)类型。