2014-09-02 2 views
0

Я пытаюсь десериализовать и xml-файл, используя объект, созданный с помощью инструмента xsd.exe. Когда я попытался запустить образец приложения, я получаю следующее исключение: InvalidOperationException - В документе XML есть ошибка (1, 1). Что я здесь делаю неправильно? Вот мои коды:Deserialize XML Invalid Operation Exception

Пример XML файл

<?xml version="1.0" encoding="utf-8"?> 
<patient> 
<pr> 
<fname>Cindy </fname> 
<lname>Knapp </lname> 
<id>1 </id> 
</pr> 
<pr> 
<fname>Regie </fname> 
<lname>Miller </lname> 
<id>2 </id> 
</pr> 
<ad> 
    <id>1</id> 
    <streetnumber>1200 NW</streetnumber> 
    <city>Miami </city> 
    <state>FL</state> 
    <zip>34488</zip> 
</ad> 
<ad> 
    <id>2</id> 
    <streetnumber>1299 NE</streetnumber> 
    <city>NY </city> 
    <state>NY</state> 
    <zip>9032</zip> 
</ad> 
</patient> 

Вот класс, который был сгенерирован

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated by a tool. 
//  Runtime Version:4.0.30319.18444 
// 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

using System.Xml.Serialization; 

// 
// This source code was auto-generated by xsd, Version=4.0.30319.17929. 
// 


/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)] 
public partial class patient { 

    private patientPR[] prField; 

    private patientAD[] adField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("pr")] 
    public patientPR[] pr { 
     get { 
      return this.prField; 
     } 
     set { 
      this.prField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("ad")] 
    public patientAD[] ad { 
     get { 
      return this.adField; 
     } 
     set { 
      this.adField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
public partial class patientPR { 

    private string fnameField; 

    private string lnameField; 

    private int idField; 

    /// <remarks/> 
    public string fname { 
     get { 
      return this.fnameField; 
     } 
     set { 
      this.fnameField = value; 
     } 
    } 

    /// <remarks/> 
    public string lname { 
     get { 
      return this.lnameField; 
     } 
     set { 
      this.lnameField = value; 
     } 
    } 

    /// <remarks/> 
    public int id { 
     get { 
      return this.idField; 
     } 
     set { 
      this.idField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)] 
public partial class patientAD { 

    private int idField; 

    private string streetnumberField; 

    private string cityField; 

    private string stateField; 

    private ushort zipField; 

    /// <remarks/> 
    public int id { 
     get { 
      return this.idField; 
     } 
     set { 
      this.idField = value; 
     } 
    } 

    /// <remarks/> 
    public string streetnumber { 
     get { 
      return this.streetnumberField; 
     } 
     set { 
      this.streetnumberField = value; 
     } 
    } 

    /// <remarks/> 
    public string city { 
     get { 
      return this.cityField; 
     } 
     set { 
      this.cityField = value; 
     } 
    } 

    /// <remarks/> 
    public string state { 
     get { 
      return this.stateField; 
     } 
     set { 
      this.stateField = value; 
     } 
    } 

    /// <remarks/> 
    public ushort zip { 
     get { 
      return this.zipField; 
     } 
     set { 
      this.zipField = value; 
     } 
    } 
} 

В основной функции, я попытался десериализация файла XML.

class Program 
    { 
     static void Main(string[] args) 
     { 
      patient pr = new patient(); 
      XmlSerializer serializer = new XmlSerializer(typeof(patient)); 
      FileStream myStream = new FileStream(@"C:\com\dss\VXReports\XSD Document\EXAMPLE.CS", FileMode.Open); 
      pr = (patient)serializer.Deserialize(myStream); 
      string kr = string.Empty; 
     } 
    } 

Stack Trace: 
    at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) 
    at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle) 
    at TestXMLFile.Program.Main(String[] args) in c:\com\dss\VXReports\Clinical Quality Measure\TestXMLFile\TestXMLFile\Program.cs:line 17 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 
+2

"C: \ ком \ ДСС \ VXReports \ XSD Document \ Example.cs" - ".cs" несколько необычное расширение для XML-файл. –

+0

@AlexeiLevenkov, что было проблемой. Я трачу более 4 часов, пытаясь понять, что не так с кодом, и я даже не заметил расширение .cs в конце имени файла. Благодарю. – user3802347

+0

Трюк должен был обратить внимание на сообщение об исключении. Это не лгал вам. Помните: «Как только вы устранили невозможное, все, что остается, как бы маловероятно, не было правдой». Итак, несмотря на то, что ваш XML-документ выглядел идеально, ваш вход в XML-сериализатор не был корректным XML-документом. Это означает, что ваш идеальный XML-документ не является вкладом в XML-сериализатор ... –

ответ

0

Я изменяю расширение файла из в .cs в .xml. Я также создал некоторые частичные классы в рамках проекта и добавил некоторые XML-украшения в классы. Ничего не изменилось в классе, который был автоматически сгенерирован с помощью xsd.exe. Мой главный класс

static void Main(string[] args) 
     { 
      patient pr = new patient(); 
      XmlSerializer serializer = new XmlSerializer(typeof(patient)); 
      FileStream myStream = new FileStream(@"C:\com\dss\VXReports\XSD Document\EXAMPLE.XML", FileMode.Open); 
      pr = (patient)serializer.Deserialize(myStream); 
      string kr = string.Empty; 
     } 

Новые Частичные классы:

[Serializable, XmlRoot("patient")] 
    public partial class patient 
    { 
     [XmlElement("pr")] 
     public patientPR[] pr { get; set; } 
     [XmlElement("ad")] 
     public patientAD[] ad { get; set; } 
    } 

    [Serializable, XmlType("pr")] 
    public partial class patientPR 
    { 
     [XmlElement("fname")] 
     public string fname { get; set; } 
     [XmlElement("lname")] 
     public string lname { get; set; } 
     [XmlElement("id")] 
     public int id { get; set; } 
    } 

    [Serializable, XmlType("ad")] 
    public partial class patientAD 
    { 
     [XmlElement("id")] 
     public int id { get; set; } 
     [XmlElement("streetnumber")] 
     public string streetnumber { get; set; } 
     [XmlElement("city")] 
     public string city { get; set; } 
     [XmlElement("state")] 
     public string state { get; set; } 
     [XmlElement("zip")] 
     public ushort zip { get; set; } 
    } 
1

Ваш код отлично подходит для меня. Удалите «Sample XML File» сверху, если у вас это есть в вашем XML. Если у вас этого нет, у вас могут быть некоторые проблемы, такие как невидимые символы или, возможно, конфликт с кодировкой. См. Эту ссылку здесь: SO, например: Deserialization error in XML document(1,1)

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