PullRequest
       18

0 голосов
/ 03 марта 2011

Я только что сгенерировал класс, используя xsd.exe (см. предыдущий вопрос ), а затем попытался использовать его для десериализации моего XML-файла.

Мои XML-файлы начинаются так:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='STIG_unclass.xsl'?>
<Benchmark xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cpe="http://cpe.mitre.org/language/2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" id="Windows_2003" xml:lang="en" xsi:schemaLocation="http://checklists.nist.gov/xccdf/1.1 http://nvd.nist.gov/schema/xccdf-1.1.4.xsd http://cpe.mitre.org/dictionary/2.0 http://cpe.mitre.org/files/cpe-dictionary_2.1.xsd" xmlns="http://checklists.nist.gov/xccdf/1.1">

и сгенерированный класс из xsd.exe запускается следующим образом:

    /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://checklists.nist.gov/xccdf/1.1")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://checklists.nist.gov/xccdf/1.1", IsNullable = false)]
public partial class Benchmark

, но когда я пытаюсь десериализовать свой XML-файл, используя следующий код:

var groups = new List<Benchmark>();
XmlSerializer serializer = new XmlSerializer(typeof(List<Benchmark>));
using (TextReader textReader = new StreamReader(open.FileName))
    groups = (List<Benchmark>)serializer.Deserialize(textReader);  // ERROR HERE

SetGroups(groups);

Я получаю сообщение об ошибке «В XML-документе (3, 2) есть ошибка».с внутренним исключением, которое говорит: «http://checklists.nist.gov/xccdf/1.1'> не ожидалось».

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Я понимаю, что это давно закрытая тема, но я также столкнулся с этой проблемой при первом использовании xsd.exe и нашел другое решение.Получается, что вы ДОЛЖНЫ включить пространство имен в xmlns, иначе вы получите ошибку

<config xmlns=''> was not expected.

Мой XML-файл выглядел следующим образом

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

После изменения на

<?xml version="1.0" encoding="utf-8" ?>
<MyClass xmlns="http://tempuri.org/MyClass.xsd>

Все прекрасно десериализовано.

2 голосов
/ 03 марта 2011

Черт, я понял ...

Я сериализировал объект как List<Benchmark> вместо Benchmark .... Изменил это, и все было исправлено!

...