【发布时间】:2016-05-12 09:16:11
【问题描述】:
我收到 System.InvalidOperationException 消息“WindowsFormsApplication1.Category 类型可能无法在此上下文中使用。”
[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);
异常的原因是什么?
更新了代码。现在可以重现异常。
【问题讨论】:
-
失败时你在做什么?请出示minimal reproducible example。
标签: c# xml-serialization