2012-03-14 17 views
3

いくつかのXMLをIListにデシリアライズしようとしていますが、問題が発生しています。これは私がこれまでにやっていることです:xmlをIListにデシリアライズする#

XML:

<?xml version="1.0" encoding="utf-8"?> 

<Animals> 
    <Animal> 
     <Name>Cow</Name> 
     <Color>Brown</Color> 
    </Animal> 
</Animals> 

モデル:

[XmlRoot("Animals")] 
public class Model 
{ 
    [XmlElement("Animal")] 
    public List<Animal> AnimalList { get; set; } 
} 

public class Animal 
{ 
    [XmlElement("Name")] 
    public string Name{ get; set; } 
    [XmlElement("Color")] 
    public string Color{ get; set; } 
} 

デシリアライズ:

FileStream fs = new FileStream("file.xml", FileMode.Open); 
XmlReader xml = XmlReader.Create(fs); 

XmlSerializer ser = new XmlSerializer(typeof(List<Model>)); 

var list = (List<Model>)ser.Deserialize(xml); 

実行しているとき、私は無効演算例外を取得します上記のコード。私は間違って何をしていますか?

おかげで、 ジェームズ・フォード

+0

あなたはあなたのクラス 'Object'に名前を付けるべきではありません、それはすべてのの基底クラスでありますクラス。 –

+0

@OskarKjellin私が知っている、それは私のプロジェクトofcでそのように指定されていません。私は質問を作成したときにはっきりと考えていませんでした。 –

+0

@KirillPolishchukどのようにして不正な形式ですか? –

答えて

3

問題は、あなたがIList<Animal>を使用していることです。使用する特定のタイプが分かるように、List<Animal>を使用する必要があります。

編集:LINQPadで次のコードを使用すると完全に動作します。違いはファイルの代わりに文字列を使ってXMLをロードするだけですが、ファイルに変更してもうまく動作します。私はSystem.Xml.Serializationのためにusingを追加しました。

void Main() 
{ 
    string xml = @"<?xml version=""1.0"" encoding=""utf-8""?> 
    <Animals> 
     <Animal> 
      <Name>Cow</Name> 
      <Color>Brown</Color> 
     </Animal> 
    </Animals>"; 

    XmlReader reader = XmlReader.Create(new StringReader(xml)); 

    XmlSerializer ser = new XmlSerializer(typeof(Model)); 

    var list = (Model)ser.Deserialize(reader); 
    list.Dump(); 
} 

// Define other methods and classes here 
[XmlRoot("Animals")] 
public class Model 
{ 
    [XmlElement("Animal")] 
    public List<Animal> AnimalList { get; set; } 
} 

public class Animal 
{ 
    [XmlElement("Name")] 
    public string Name{ get; set; } 
    [XmlElement("Color")] 
    public string Color{ get; set; } 
} 
3

私はあなたがこれにあなたのXmlSerializerを変更する必要があると思う:

XmlSerializer ser = new XmlSerializer(typeof(Model));

あなたがモデルのリストをシリアライズしようとしていた前に、あなたがモデルにXMLファイルをシリアル化したい、どのもののリストを含んでいます。

はまた、あなたがそれを試してみてください

public List<Animal> AnimalList { get; set; }

4

にごObjectList定義を変更する必要があります。

// Create a new XmlSerializer instance with the type of the test class 
XmlSerializer SerializerObj = new XmlSerializer(typeof(List<Model>)); 

// Create a new file stream for reading the XML file 
FileStream ReadFileStream = new FileStream(@"C:\file.xml", FileMode.Open, FileAccess.Read, FileShare.Read); 

// Load the object saved above by using the Deserialize function 
List<Model> LoadedObj = (List<Model>)SerializerObj.Deserialize(ReadFileStream); 

// Cleanup 
ReadFileStream.Close(); 
+0

同じ例外です。 –

関連する問題