2012-03-14 1 views
3

Я пытаюсь десериализовать некоторый xml в IList, но у меня возникают проблемы. Это то, что я сделал до сих пор:Deserialize xml to IList C#

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>, чтобы он знал конкретный тип для использования.

EDIT: Использование следующего кода в LINQPad отлично работает. Единственное отличие заключается в том, что я загружаю XML через строку вместо файла, но даже когда я перехожу к файлу, он отлично работает. Я просто добавил использование для System.Xml.Serialization.

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-файл в модель, которая содержит список вещей.

Кроме того, вы должны изменить свое ObjectList определение

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

4

Попробуйте это:

// 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

Такое же исключение. –

 Смежные вопросы

  • Нет связанных вопросов^_^