序列化时出现InvalidOperationException

时间:2012-02-07 05:50:57

标签: c# .net reflection xml-serialization

我在尝试反映“listing”属性时遇到InvalidOperationException,如内部异常所述。当它试图序列化军队列表时。

所有变量都是公开的。 Checked List可以序列化。我发现大多数错误都与人们使用字典无法实现。

知道它为什么看起来不可序列化?

//[Serializable]
public class ArmyListing
{

    [XmlElement("army")]
    public List<Army> listing { get; set; }

    public void SerializeToXML(ArmyListing armyListing)
    {
        try
        {
            XmlSerializer serializer = new XmlSerializer(typeof(ArmyListing));
            TextWriter textWriter = new StreamWriter(@"C:\Test\40k.xml");
            serializer.Serialize(textWriter, armyListing);
            textWriter.Close();
        }
        catch (Exception ex) { }
    }
}

//[Serializable]
public class Army
{
    //public Army();

    [XmlAttribute]
    [XmlArray("unit-category")]
    public List<UnitCategory> settingconstraints { get; set; }
    [XmlAttribute("name")]
    public string armyName { get; set; }
}

//[Serializable]
public class UnitCategory
{
    //public UnitCategory();

    [XmlArray("unit-type")]
    public List<UnitType> setting { get; set; }
    [XmlAttribute("name")]
    public string unitCategoryName { get; set; }
}

//[Serializable]
public class UnitType
{
    //public UnitType();

    [XmlArray("unit")]
    public List<Unit> setting { get; set; }
    [XmlAttribute("name")]
    public string unitTypeName { get; set; }
}

//[Serializable]
public class Unit
{
    //public Unit();

    [XmlAttribute("name")]
    public string unitName { get; set; }
    [XmlAttribute("composition")]
    public string compsition { get; set; }
    [XmlAttribute("weapon-skill")]
    public string weaponSkill { get; set; }
    [XmlAttribute("ballistic-skill")]
    public string ballisticSkill { get; set; }
    [XmlAttribute("strength")]
    public string strength { get; set; }
    [XmlAttribute("toughness")]
    public string T { get; set; }
    [XmlAttribute("wounds")]
    public string wounds { get; set; }
    [XmlAttribute("initiative")]
    public string initiative { get; set; }
    [XmlAttribute("attacks")]
    public string attacks { get; set; }
    [XmlAttribute("leadership")]
    public string leadership { get; set; }
    [XmlAttribute("saving-throw")]
    public string saveThrow { get; set; }
    [XmlAttribute("armour")]
    public string armour { get; set; }
    [XmlAttribute("weapons")]
    public string weapons { get; set; }
    [XmlAttribute("special-rules")]
    public string specialRules { get; set; }
    [XmlAttribute("dedicated-transport")]
    public string dedicatedTransport { get; set; }
    [XmlAttribute("options")]
    public string options { get; set; }
}

 //Form
namespace ThereIsOnlyRules
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ArmyListing armyListing = new ArmyListing();
        armyListing.SerializeToXML(armyListing);
    }
}
}

1 个答案:

答案 0 :(得分:11)

这是不起作用的部分:

[XmlAttribute]
[XmlArray("unit-category")]

[XmlArray]&amp; [XmlAttribute]无法在同一媒体资源上定义。

如果您继续深入.InnerException直到遇到原始问题,系列化工具甚至会告诉您:

There was an error reflecting type 'ArmyListing'.
There was an error reflecting property 'listing'.
There was an error reflecting type 'Army'.
There was an error reflecting property 'settingconstraints'.
XmlAttribute and XmlAnyAttribute cannot be used in conjunction with XmlElement, XmlText, XmlAnyElement, XmlArray, or XmlArrayItem.