2012-02-07 4 views
5

Otrzymuję wyjątek InvalidOperationException podczas próby odzwierciedlenia właściwości "listing", zgodnie z wewnętrznym wyjątkiem. Kiedy próbuje serializować LineListing.Wyjątek InvalidOperationException podczas szeregowania

Wszystkie zmienne są publiczne. Lista sprawdzana może być serializowana. Większość błędów znalazłem tam, gdzie ludzie używają słowników, których nie można.

Jakiś pomysł, dlaczego wydaje się nie być możliwy do serializacji?

//[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); 
    } 
} 
} 
+0

+1 dla odniesień Warhammer40k^_ ^! –

Odpowiedz

10

Jest to część, która nie działa:

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

[XmlArray] & [XmlAttribute] nie mogą być określone zarówno na tej samej nieruchomości.

Jeśli trzymać wiercenia w .InnerException aż dojdziesz do oryginalnego problemu The serializer nawet mówi, to:

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. 
+2

(dodano komunikaty, które na to wskazują, mam nadzieję, że jest OK) –

+0

Ty - powinienem był o tym pomyśleć. :-) –