从属性设置器填充时未序列化C#组件集合属性

从属性设置器填充时未序列化C#组件集合属性,c#,collections,components,properties,C#,Collections,Components,Properties,我有一个C#组件,它有两个属性,Property1和Property2。Property1是int类型的简单属性,Property2是一个列表,其中T是一个自定义类。Property2具有DesignerSerializationVisibility.Content属性集 当在设计时设置Property1时,组件应生成所设置的自定义类的数量。这是可行的,但是类没有序列化到Designer.cs文件。当我通过Visual Studio的标准集合编辑器添加自定义类时,该类被序列化到Designer.

我有一个C#组件,它有两个属性,Property1和Property2。Property1是int类型的简单属性,Property2是一个列表,其中T是一个自定义类。Property2具有DesignerSerializationVisibility.Content属性集

当在设计时设置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; }
    }
}
公共类TestComponent:Component
{
私人国际单位计数;
公共整数计数
{
获取{return\u Count;}
设置
{ 
_计数=数值;
Columns.Clear();
对于(int i=0;i<\u Count;i++)
{
TestClass tClass=新的TestClass();
tClass.Description=“TestClass”+i.ToString();
Columns.Add(tClass);
}
}
}
私有列表列=新列表();
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
公共列表列
{ 
获取{返回列;}
}
}
[ToolboxItem(false)、DesignTimeVisible(false)]
公共类TestClass:组件
{
私有字符串描述;
公共字符串描述
{
获取{return\u Description;}
设置{u Description=value;}
}
}

Columns属性没有设置器。序列化程序将忽略此属性。更改为:

private List<TestClass> columns = new List<TestClass>();
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<TestClass> Columns 
{ 
        get { return columns; } 
        set { columns = value; }
}
private List columns=new List();
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
公共列表列
{ 
获取{返回列;}
设置{columns=value;}
}

Columns属性没有设置器。序列化程序将忽略此属性。更改为:

private List<TestClass> columns = new List<TestClass>();
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<TestClass> Columns 
{ 
        get { return columns; } 
        set { columns = value; }
}
private List columns=new List();
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
公共列表列
{ 
获取{返回列;}
设置{columns=value;}
}

注:答案由@urk_在其问题正文中提供。我已将问题回滚到原始状态,并将更改复制为CW


更新:我已经找到了解决方案。我不得不加上这句话:

this.Container.Add(tClass); 让设计器序列化生成的类。我已经更新了下面的代码以反映这一变化。现在这些类被序列化到Designer.cs

在循环的中,代码更改如下

for(int i=0;i<\u Count;i++)
{
TestClass tClass=新的TestClass();
tClass.Description=“TestClass”+i.ToString();
Columns.Add(tClass);

this.Container.Add(tClass);//注意:答案由@urk_在他的问题正文中提供。我已将问题回滚到原始状态,并将更改复制为CW


更新:我已经找到了解决方案。我必须添加以下行:

this.Container.Add(tClass); 使设计器序列化生成的类。我已更新下面的代码以反映此更改。现在这些类被序列化到Designer.cs

在循环的中,代码更改如下

for(int i=0;i<\u Count;i++)
{
TestClass tClass=新的TestClass();
tClass.Description=“TestClass”+i.ToString();
Columns.Add(tClass);

this.Container.Add(tClass);//嗨,Richard,这没有解决问题,但我已经找到了解决方案。我更新了原始问题以反映解决方案。嗨,Richard,这没有解决问题,但我已经找到了解决方案。我更新了原始问题以反映解决方案。