System.MissingMethodException 使用 propertyGrid 时
System.MissingMethodException when using propertyGrid
我有一个class
class PartitionTemplate
{
public PartitionTemplate()
{
keepLabels = new List<string>();
partitions = new List<partition>();
}
[JsonProperty("keepLabels")]
public List<String> keepLabels { get; set; }
[JsonProperty("slot")]
public int slot { get; set; }
....
}
我的目标是用 propertyGrid
编辑它,使用以下代码:
PartitionTemplate partiTemplate;
//fi is FileInfo with the class as json using
//Newtonsoft.Json.JsonConvert.DeserializeObject<PartitionTemplate>(File.ReadAllText(partitionfile.FullName));
PartitionTemplate.ReadOrCreatePartitonConfigurationFile(out partiTemplate, fi);
propertyGrid1.SelectedObject = partiTemplate;
我的问题是:
当我尝试将 add
元素添加到 keepLabels
时,出现以下错误:
Exception thrown: 'System.MissingMethodException' in mscorlib.dll
Additional information: Constructor on type 'System.String' not found.
如何修复?
发生这种情况是因为当您单击 Collection Editor(属性 网格的标准编辑器)中的 'Add' 按钮时,它会使用假设的 [=19= 创建一个新项目] 无参数构造函数,在 System.String 上不存在(你不能做 var s = new String();
)。
不过,如果您想保持 keepLabels 属性 不变,您可以创建一个自定义编辑器,如下所示:
// decorate the property with this custom attribute
[Editor(typeof(StringListEditor), typeof(UITypeEditor))]
public List<String> keepLabels { get; set; }
....
// this is the code of a custom editor class
// note CollectionEditor needs a reference to System.Design.dll
public class StringListEditor : CollectionEditor
{
public StringListEditor(Type type)
: base(type)
{
}
// you can override the create instance and return whatever you like
protected override object CreateInstance(Type itemType)
{
if (itemType == typeof(string))
return string.Empty; // or anything else
return base.CreateInstance(itemType);
}
}
我有一个class
class PartitionTemplate
{
public PartitionTemplate()
{
keepLabels = new List<string>();
partitions = new List<partition>();
}
[JsonProperty("keepLabels")]
public List<String> keepLabels { get; set; }
[JsonProperty("slot")]
public int slot { get; set; }
....
}
我的目标是用 propertyGrid
编辑它,使用以下代码:
PartitionTemplate partiTemplate;
//fi is FileInfo with the class as json using
//Newtonsoft.Json.JsonConvert.DeserializeObject<PartitionTemplate>(File.ReadAllText(partitionfile.FullName));
PartitionTemplate.ReadOrCreatePartitonConfigurationFile(out partiTemplate, fi);
propertyGrid1.SelectedObject = partiTemplate;
我的问题是:
当我尝试将 add
元素添加到 keepLabels
时,出现以下错误:
Exception thrown: 'System.MissingMethodException' in mscorlib.dll
Additional information: Constructor on type 'System.String' not found.
如何修复?
发生这种情况是因为当您单击 Collection Editor(属性 网格的标准编辑器)中的 'Add' 按钮时,它会使用假设的 [=19= 创建一个新项目] 无参数构造函数,在 System.String 上不存在(你不能做 var s = new String();
)。
不过,如果您想保持 keepLabels 属性 不变,您可以创建一个自定义编辑器,如下所示:
// decorate the property with this custom attribute
[Editor(typeof(StringListEditor), typeof(UITypeEditor))]
public List<String> keepLabels { get; set; }
....
// this is the code of a custom editor class
// note CollectionEditor needs a reference to System.Design.dll
public class StringListEditor : CollectionEditor
{
public StringListEditor(Type type)
: base(type)
{
}
// you can override the create instance and return whatever you like
protected override object CreateInstance(Type itemType)
{
if (itemType == typeof(string))
return string.Empty; // or anything else
return base.CreateInstance(itemType);
}
}