我要做的是将Xml转换为c#类。
这是我的xml:
<?xml version="1.0"?>
<ReportCollection>
<reports>
<rpt name="Auftrag.mrt">
<ConnectionString>
some stuff
</ConnectionString>
<Fields>
<Field name="EON" inDb="dbo.PEARepVServiceAnforderung.EON" />
<Field name="Mandant" inDb="dbo.PEARepVServiceAnforderung.Mandant" />
<Field name="Anrede" inDb="KHKAdressen2.Anrede" />
<Field name="Name1" inDb="KHKAdressen2.Name1" />
<Field name="Name2" inDb="KHKAdressen2.Name2" />
<Field name="LieferStrasse" inDb="KHKAdressen2.LieferStrasse" />
<Field name="LieferPLZORT" inDb="KHKAdressen2.LieferPLZ + ' ' + KHKAdressen2.LieferOrt AS LieferPLZORT" />
<Field name="Telefon" inDb="KHKAdressen2.Telefon" />
<Field name="DebitorName1" inDb="KHKAdressen_1.Name1 AS DebitorName1" />
<Field name="DebitorName2" inDb="KHKAdressen_1.Name2 AS DebitorName2" />
<Field name="DebitorStrasse" inDb="KHKAdressen_1.LieferStrasse AS DebitorStrasse" />
<Field name="DebitorPLZOrt" inDb="KHKAdressen_1.LieferLand + ' - ' + KHKAdressen_1.LieferPLZ + ' ' + KHKAdressen_1.LieferOrt AS DebitorPLZOrt" />
<Field name="EdkdauftragNr" inDb="dbo.PEARepVServiceAnforderung.EdkdauftragNr" />
<Field name="Auftragsdatum" inDb="CONVERT(nvarchar(10), dbo.PEARepVServiceAnforderung.EingangZeitpkt, 104) AS Auftragsdatum" />
<Field name="Bearbeiter" inDb="dbo.PEARepVServiceAnforderung.Bearbeiter" />
<Field name="StandortMatchcode" inDb="KHKAdressen2.Matchcode AS StandortMatchcode" />
<Field name="Kommentar" inDb="dbo.PEARepVServiceAnforderung.Kommentar" />
<Field name="Callnummer" inDb="dbo.PEARepVServiceAnforderung.KdauftragsNr AS Callnummer" />
<Field name="Ansprechpartner" inDb="dbo.PEARepVServiceAnforderung.Ansprechpartner" />
<Field name="Mobil" inDb="KHKAdressen2.Mobilfunk AS Mobil" />
<Field name="AuftraggeberAdresse" inDb="KHKAdressen_1.Adresse AS AuftraggeberAdresse" />
<Field name="Auftraggeber" inDb="dbo.PEARepVServiceAnforderung.Rechnungsempfaenger AS Auftraggeber" />
<Field name="DebitorTelefon" inDb="KHKAdressen_1.Telefon AS DebitorTelefon" />
<Field name="DebitorFax" inDb="KHKAdressen_1.Telefax AS DebitorFax" />
<Field name="DebitorEMail" inDb="KHKAdressen_1.EMail AS DebitorEMail" />
<Field name="DebitorHomepage" inDb="KHKAdressen_1.Homepage AS DebitorHomepage" />
<Field name="TerminVon" inDb="(CASE WHEN CONVERT(nvarchar(10), PEARepVServiceAnforderung.TerminVon, 104) <> CONVERT(nvarchar(10), PEARepVServiceAnforderung.EingangZeitpkt, 104) THEN CONVERT(nvarchar(10), PEARepVServiceAnforderung.TerminVon, 104) + ' ' + CONVERT(nvarchar(5), PEARepVServiceAnforderung.TerminVon, 108) ELSE ' ' END) AS TerminVon" />
<Field name="TerminBis" inDb="(CASE WHEN CONVERT(nvarchar(10), PEARepVServiceAnforderung.TerminBis, 104) <> CONVERT(nvarchar(10), PEARepVServiceAnforderung.EingangZeitpkt, 104) THEN CONVERT(nvarchar(10), PEARepVServiceAnforderung.TerminBis, 104) + ' ' + CONVERT(nvarchar(5), PEARepVServiceAnforderung.TerminBis, 108) ELSE ' ' END) AS TerminBis" />
<Field name="DebitorAnrede" inDb="KHKAdressen_1.Anrede AS DebitorAnrede" />
<Field name="Telefax" inDb="KHKAdressen2.Telefax" />
<Field name="EMail" inDb="KHKAdressen2.EMail" />
<Field name="Homepage" inDb="KHKAdressen2.Homepage" />
</Fields>
</rpt>
<rpt name="sub_Info_an_Kunde.mrt">
<ConnectionString>
some stuff
</ConnectionString>
<Fields>
<Field name="EON" inDb="PEARepVServiceAnforderung.EON" />
<Field name="Mandant" inDb="PEARepVServiceAnforderung.Mandant" />
<Field name="Anrede" inDb="KHKAdressen2.Anrede" />
<Field name="Name1" inDb="KHKAdressen2.Name1" />
<Field name="Name2" inDb="KHKAdressen2.Name2" />
<Field name="LieferStrasse" inDb="KHKAdressen2.LieferStrasse" />
<Field name="LieferPLZORT" inDb="KHKAdressen2.LieferPLZ + ' ' + KHKAdressen2.LieferOrt AS LieferPLZORT" />
<Field name="Telefon" inDb="KHKAdressen2.Telefon" />
<Field name="DebitorName1" inDb="KHKAdressen.Name1 AS DebitorName1" />
<Field name="DebitorName2" inDb="KHKAdressen.Name2 AS DebitorName2" />
<Field name="DebitorStrasse" inDb="KHKAdressen.LieferStrasse AS DebitorStrasse" />
<Field name="DebitorPLZOrt" inDb="KHKAdressen.LieferLand + ' - ' + KHKAdressen.LieferPLZ + ' ' + KHKAdressen.LieferOrt AS DebitorPLZOrt" />
<Field name="Callnummer" inDb="PEARepVServiceAnforderung.EdkdauftragNr AS Callnummer" />
<Field name="Auftragsdatum" inDb="CONVERT(nvarchar(10)" />
<Field name="Bearbeiter" inDb="PEARepVServiceAnforderung.Bearbeiter" />
<Field name="Auftraggeber" inDb="PEARepVServiceAnforderung.Rechnungsempfaenger AS Auftraggeber" />
<Field name="StandortMatchcode" inDb="KHKAdressen2.Matchcode AS StandortMatchcode" />
<Field name="TerminVon" inDb="PEARepVServiceAnforderung.TerminVon" />
<Field name="TerminBis" inDb="PEARepVServiceAnforderung.TerminBis" />
<Field name="TechnikerName" inDb="KHKAdressen1.Name1 AS TechnikerName" />
<Field name="WerkstattNr" inDb="KHKAdressen1.Referenz AS WerkstattNr" />
<Field name="Kommentar" inDb="PEARepVServiceAnforderung.Kommentar" />
<Field name="EndKdNr" inDb="PEARepVStandortErweiterung.EndKdNr" />
<Field name="KdauftragsNr" inDb="PEARepVServiceAnforderung.KdauftragsNr" />
<Field name="Ansprechpartner" inDb="PEARepVServiceAnforderung.Ansprechpartner" />
</Fields>
</rpt>
<rpt name="sub_Gesamtpreis.mrt">
<ConnectionString>
some stuff
</ConnectionString>
<Fields>
<Field name="EON" inDb="EON" />
<Field name="Mandant" inDb="Mandant" />
<Field name="Summe" inDb="Summe" />
</Fields>
</rpt>
<rpt name="sub_ReparaturauftragGeräte.mrt">
<ConnectionString>
some stuff
</ConnectionString>
<Fields>
<Field name="EON" inDb="dbo.PEARepVServiceAnforderungGeraete.EON" />
<Field name="Mandant" inDb="dbo.PEARepVServiceAnforderungGeraete.Mandant" />
<Field name="ServiceAnforderungGeraetePosition" inDb="dbo.PEARepVServiceAnforderungGeraete.ServiceAnforderungGeraetePosition" />
<Field name="ArtikelGruppenGeräteart" inDb="dbo.KHKArtikelgruppen.Bezeichnung AS ArtikelGruppenGeräteart" />
<Field name="Hersteller" inDb="dbo.KHKArtikel.Hersteller" />
<Field name="Typ" inDb="dbo.PEARepVGeraete.ArtikelNummer AS Typ" />
<Field name="SerienNr" inDb="dbo.PEARepVGeraete.SerienNr" />
<Field name="Geräteart" inDb="dbo.KHKArtikel.Matchcode as Geräteart" />
<Field name="User_HerstellerSN" inDb="dbo.PEARepVGeraete.User_HerstellerSN" />
</Fields>
</rpt>
<rpt name="sub_ReparaturauftragKDInfo.mrt">
<ConnectionString>
some stuff
</ConnectionString>
<Fields>
<Field name="EON" inDb="EON" />
<Field name="Mandant" inDb="Mandant" />
<Field name="Kommentar" inDb="Kommentar" />
</Fields>
</rpt>
<rpt name="sub_ServiceAdresse.mrt">
<ConnectionString>
some stuff
</ConnectionString>
<Fields>
<Field name="Adresse" inDb="Adresse" />
<Field name="Mandant" inDb="Mandant" />
<Field name="USER_ServiceTelefon" inDb="USER_ServiceTelefon" />
<Field name="USER_ServiceFax" inDb="USER_ServiceFax" />
<Field name="USER_ServiceMail" inDb="USER_ServiceMail" />
</Fields>
</rpt>
<rpt name="sub_ServiceAnforderungenArtikel.mrt">
<ConnectionString>
some stuff
</ConnectionString>
<Fields>
<Field name="EON" inDb="EON" />
<Field name="Mandant" inDb="Mandant" />
<Field name="Pos" inDb="ServiceAnforderungDetailsPosition AS Pos" />
<Field name="ETNummer" inDb="ArtikelNummer AS ETNummer" />
<Field name="Bezeichnung" inDb="Bezeichnung1 AS Bezeichnung" />
<Field name="Stück" inDb="Menge AS Stück" />
<Field name="EPreis" inDb="Einzelpreis AS EPreis" />
<Field name="GPreis" inDb="Summe AS GPreis" />
</Fields>
</rpt>
<rpt name="sub_ServiceAnforderungGeräte.mrt">
<ConnectionString>
some stuff
</ConnectionString>
<Fields>
<Field name="EON" inDb="PEARepVServiceAnforderungGeraete.EON" />
<Field name="Mandant" inDb="PEARepVServiceAnforderungGeraete.Mandant" />
<Field name="ServiceAnforderungGeraetePosition" inDb="PEARepVServiceAnforderungGeraete.ServiceAnforderungGeraetePosition" />
<Field name="Fehler" inDb="PEARepVServiceAnforderung.Kommentar AS Fehler" />
<Field name="Auftrag" inDb="PEARepVServiceAnforderungGeraete.Fehlerbeschreibung AS Auftrag" />
<Field name="Reparaturbeschreibung" inDb="PEARepVServiceAnforderungGeraete.Fehlerbehebung AS Reparaturbeschreibung" />
<Field name="FehlerCode" inDb="PEARepVServiceAnforderungGeraete.FehlerCode" />
<Field name="FehlerCodeERWID" inDb="PEARepVServiceAnforderungGeraete.FehlerCodeERWID" />
<Field name="Fehlertyp" inDb="(Select Bezeichnung from PEARepVGruppen where Gruppe = PEARepVServiceAnforderungGeraete.FehlerCodeERWID and Typ = 60) as Fehlertyp" />
<Field name="FehlerCodeID" inDb="PEARepVServiceAnforderungGeraete.FehlerCodeID" />
</Fields>
</rpt>
<rpt name="sub_Termin.mrt">
<ConnectionString>
some stuff
</ConnectionString>
<Fields>
<Field name="EON" inDb="EON" />
<Field name="Mandant" inDb="Mandant" />
<Field name="TerminVon" inDb="(CASE WHEN CONVERT(nvarchar(10)" />
<Field name="TerminBis" inDb="(CASE WHEN CONVERT(nvarchar(10), TerminBis, 104) <> CONVERT(nvarchar(10), EingangZeitpkt, 104) THEN CONVERT(nvarchar(10), TerminBis, 104) + ' ' + CONVERT(nvarchar(5), TerminBis, 108) ELSE ' ' END) AS TerminBis" />
</Fields>
</rpt>
</reports>
</ReportCollection>
这些是我的课程:
Reports.cs:
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
namespace eRepairXmlLogic
{
[Serializable()]
[System.Xml.Serialization.XmlRoot("ReportCollection")]
public class ReportCollection
{
[XmlArray("Reports")]
[XmlArrayItem("rpt", typeof(Report))]
public Report[] Report { get; set; }
}
}
Report.cs:
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
namespace eRepairXmlLogic
{
[Serializable()]
[System.Xml.Serialization.XmlRoot("Report")]
public class Report
{
[System.Xml.Serialization.XmlElement("name")]
public string name { get; set; }
[System.Xml.Serialization.XmlElement("ConnectionString")]
public string conStr { get; set; }
[XmlArray("Fields")]
[XmlArrayItem("Field", typeof(Field))]
public Field[] Field { get; set; }
}
}
Field.cs:
using System;
using System.Collections.Generic;
using System.Text;
namespace eRepairXmlLogic
{
[Serializable()]
public class Field
{
[System.Xml.Serialization.XmlElement("name")]
public string name { get; set; }
[System.Xml.Serialization.XmlElement("inDb")]
public string inDb { get; set; }
}
}
这是我的代码:
static bool DeserializeXml(string path)
{
ReportCollection rpts = null;
XmlSerializer serializer = new XmlSerializer(typeof(ReportCollection));
StreamReader reader = new StreamReader(path);
rpts = (ReportCollection)serializer.Deserialize(reader);
reader.Close();
return true;
}
因为我从这篇文章How to Deserialize XML document得到了这个应该有效,我放弃了,我得到一个错误:
rpts = (ReportCollection)serializer.Deserialize(reader);
类型错误:System.Xml.dll中的“System.InvalidOperationException”
其他信息:XML-Document(2,2)中的错误
答案 0 :(得分:1)
在班级Report
中,删除属性XmlRoot
[Serializable()]
//[System.Xml.Serialization.XmlRoot("Report")] //Remove or comment this
public class Report
{
.
.
.