在此上下文中不能使用类型 [XYZ]

The type [XYZ] may not be used in this context

我收到 System.InvalidOperationException 消息 "The type WindowsFormsApplication1.Category may not be used in this context."

[Serializable]
public enum EAction
{
    defaultAction,
}

public class Configuration : List<Product>
{
}

public class ConfigurationItem
{
    [XmlAttribute("name")]
    public string Name { get; set; }


    [XmlAttribute("action")]
    public EAction Action { get; set; }
}

public class ConfigurationItemCollection : ConfigurationItem, IEnumerable<ConfigurationItem>
{
    [XmlIgnore]
    public IEnumerable<ConfigurationItem> Children
    {
        get
        {
            return _items;
        }
    }

    private List<ConfigurationItem> _items = new List<ConfigurationItem>();

    public virtual void Add(object item)
    {
        ConfigurationItem cfgItem = item as ConfigurationItem;
        if (cfgItem != null)
            _items.Add(cfgItem);
    }

    public IEnumerator<ConfigurationItem> GetEnumerator()
    {
        return _items.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return _items.GetEnumerator();
    }
}

[XmlInclude(typeof(Category))]
public class Product : ConfigurationItemCollection
{
}

[XmlInclude(typeof(Addon))]
public class Category : ConfigurationItemCollection
{
}

public class Addon : ConfigurationItem
{
}

用法: 配置cfg = new Configuration();

        Product product = new Product();
        product.Name = "Product";
        product.Action = EAction.defaultAction;
        cfg.Add(product);

        Category category = new Category();
        category.Name = "Category";
        category.Action = EAction.defaultAction;

        Addon addon = new Addon();
        addon.Name = "AddOn";
        addon.Action = EAction.defaultAction;

        product.Add(category);
        product.Add(addon);

        Addon addon2 = new Addon();
        addon2.Name = "AddOn 2";
        addon2.Action = EAction.defaultAction;
        category.Add(addon2);

        Addon addon3 = new Addon();
        addon3.Name = "AddOn 3";
        addon3.Action = EAction.defaultAction;
        category.Add(addon3);

        XmlSerializer x = new XmlSerializer(typeof(Configuration));
        TextWriter writer = new StreamWriter(@"d:\temp\cfg.xml");
        x.Serialize(writer, cfg);

异常的原因是什么?

更新了代码。现在可以重现异常。

好吧,我已经修改了我的 类 并以另一种方式获得了我需要的结果:

[Serializable]
public enum EAction
{
    defaultAction,
}

[XmlRoot("Configuration")]
public class Configuration
{
    public Configuration()
    {
        Products = new List<Product>();
    }

    [XmlElement("Product", Type = typeof(Product))]
    public List<Product> Products { get; set; }
}

public class ConfigurationItem
{
    [XmlAttribute("name")]
    public string Name { get; set; }


    [XmlAttribute("action")]
    public EAction Action { get; set; }
}

public class Product : ConfigurationItem
{
    public Product()
    {
        Items = new List<ConfigurationItem>();
    }

    [XmlElement("Category", Type = typeof(Category))]
    [XmlElement("Addon", Type = typeof(Addon))]
    public List<ConfigurationItem> Items { get; set; }
}

public class Category : ConfigurationItem
{
    public Category()
    {
        Items = new List<ConfigurationItem>();
    }

    [XmlElement("Category", Type = typeof(Category))]
    [XmlElement("Addon", Type = typeof(Addon))]
    public List<ConfigurationItem> Items { get; set; }
}

public class Addon : ConfigurationItem
{
}