我有一个C#组件,它有两个属性,Property1和Property2。 Property1是int类型的简单属性,Property2是List,其中T是自定义类。 Property2具有DesignerSerializationVisibility.Content属性集。
在Designtime设置Property1时,组件应生成已设置的自定义类的数量。这可以工作,但类没有序列化到Designer.cs文件。当我通过Visual Studio的标准集合编辑器添加自定义类时,该类被序列化为Designer.cs文件。
如何让Visual Studio将生成的类序列化为Designer.cs文件?
以下是我现在所拥有的一小部分样本:
public class TestComponent : Component
{
private int _Count;
public int Count
{
get { return _Count; }
set
{
_Count = value;
Columns.Clear();
for (int i = 0; i < _Count; i++)
{
TestClass tClass = new TestClass();
tClass.Description = "TestClass" + i.ToString();
Columns.Add(tClass);
}
}
}
private List<TestClass> columns = new List<TestClass>();
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<TestClass> Columns
{
get { return columns; }
}
}
[ToolboxItem(false), DesignTimeVisible(false)]
public class TestClass : Component
{
private string _Description;
public string Description
{
get { return _Description; }
set { _Description = value; }
}
}
答案 0 :(得分:2)
Columns属性没有setter。序列化程序将忽略此属性。改为:
private List<TestClass> columns = new List<TestClass>();
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<TestClass> Columns
{
get { return columns; }
set { columns = value; }
}
答案 1 :(得分:1)
注意:答案由@urk_forever在他的问题正文中提供。我已将问题回滚到原始状态,并将更改复制为CW
更新:我已经找到了解决方案。我不得不添加这一行:
this.Container.Add(tClass); 让Designer序列化生成的类。我已更新以下代码以反映此更改。现在这些类被序列化为Designer.cs。
代码在for-loop
[IAbstract]
for (int i = 0; i < _Count; i++)
{
TestClass tClass = new TestClass();
tClass.Description = "TestClass" + i.ToString();
Columns.Add(tClass);
this.Container.Add(tClass); // <-- added
}