Я пытаюсь десериализовать и 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()
"C: \ ком \ ДСС \ VXReports \ XSD Document \ Example.cs" - ".cs" несколько необычное расширение для XML-файл. –
@AlexeiLevenkov, что было проблемой. Я трачу более 4 часов, пытаясь понять, что не так с кодом, и я даже не заметил расширение .cs в конце имени файла. Благодарю. – user3802347
Трюк должен был обратить внимание на сообщение об исключении. Это не лгал вам. Помните: «Как только вы устранили невозможное, все, что остается, как бы маловероятно, не было правдой». Итак, несмотря на то, что ваш XML-документ выглядел идеально, ваш вход в XML-сериализатор не был корректным XML-документом. Это означает, что ваш идеальный XML-документ не является вкладом в XML-сериализатор ... –