首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >序列化时的InvalidOperationException

序列化时的InvalidOperationException
EN

Stack Overflow用户
提问于 2012-02-07 13:50:57
回答 1查看 5K关注 0票数 6

当我试图反映"listing“属性时,我得到了一个InvalidOperationException,正如内部异常所说的那样。当它尝试序列化ArmyListing时。

所有的变量都是公共的。检查列表可以序列化。我发现的大多数错误与人们使用字典的地方是不能的。

你知道为什么它看起来是不可序列化的吗?

代码语言:javascript
复制
//[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);
    }
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-07 14:07:02

这是不起作用的部分:

代码语言:javascript
复制
[XmlAttribute]
[XmlArray("unit-category")]

不能在同一属性上同时定义[XmlArray][XmlAttribute]

如果您一直钻研.InnerException,直到您遇到原始问题,序列化程序甚至会告诉您:

代码语言:javascript
复制
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.
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9171596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档