2016-04-26 37 views
1

這是我的XML腳本,我想序列化:序列化支類(名單)

<?xml version="1.0"?> 
 
<Reports xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
 
    <ListReportTypes> 
 
    <ReportType Name="ABCD.Record.ABC, abcd, Version=1.0.3.4, Culture=neutral, PublicKeyToken=null"> 
 
     <ListOfReportColumns> 
 
     <ColumnProperty DBColumn="System" Display="System" IsColumnDisplay="true" IsSelectedByUser="true" SelectedPosition="0" /> 
 
     <ColumnProperty DBColumn="Operation" Display="Operation" IsColumnDisplay="true" IsSelectedByUser="true" SelectedPosition="1" /> 
 
     <ColumnProperty DBColumn="FromTime" Display="FromTime" IsColumnDisplay="true" IsSelectedByUser="true" SelectedPosition="2" /> 
 
     <ColumnProperty DBColumn="ToDate" Display="ToDate" IsColumnDisplay="true" IsSelectedByUser="true" SelectedPosition="3" /> 
 
     </ListOfReportColumns> 
 
    </ReportType> 
 
    <ReportType Name="ExcelReport.SystemModeOfOperationReportRecord, MMM, Version=1.0.3.4, Culture=neutral, PublicKeyToken=null"> 
 
     <ListOfReportColumns> 
 
     <ColumnProperty DBColumn="SDF Sig. Level Max." Display="SDF Sig. Level Max." IsColumnDisplay="true" IsSelectedByUser="false" SelectedPosition="-1" /> 
 
     <ColumnProperty DBColumn="SDF Max. Emitters" Display="SDF Max. Emitters" IsColumnDisplay="true" IsSelectedByUser="false" SelectedPosition="-1" /> 
 
     <ColumnProperty DBColumn="DF RFU Control" Display="DF RFU Control" IsColumnDisplay="true" IsSelectedByUser="false" SelectedPosition="-1" /> 
 
     <ColumnProperty DBColumn="SDF Sig. Level Min." Display="SDF Sig. Level Min." IsColumnDisplay="true" IsSelectedByUser="false" SelectedPosition="-1" /> 
 
     <ColumnProperty DBColumn="LNA" Display="LNA" IsColumnDisplay="true" IsSelectedByUser="false" SelectedPosition="-1" /> 
 
     </ListOfReportColumns> 
 
    </ReportType> 
 
    <ReportType Name="ExcelReport.SystemDeploymentReportRecord, MMM, Version=1.0.3.4, Culture=neutral, PublicKeyToken=null"> 
 
     <ListOfReportColumns> 
 
     <ColumnProperty DBColumn="Zone" Display="Zone" IsColumnDisplay="true" IsSelectedByUser="false" SelectedPosition="-1" /> 
 
     <ColumnProperty DBColumn="Altitude" Display="Altitude" IsColumnDisplay="true" IsSelectedByUser="false" SelectedPosition="-1" /> 
 
     <ColumnProperty DBColumn="MGR" Display="MGR" IsColumnDisplay="true" IsSelectedByUser="false" SelectedPosition="-1" /> 
 
     <ColumnProperty DBColumn="North" Display="North" IsColumnDisplay="true" IsSelectedByUser="false" SelectedPosition="-1" /> 
 
     </ListOfReportColumns> 
 
    </ReportType> 
 
    </ListReportTypes> 
 
</Reports>

這是我的連載類:

using System; 
 
using System.Collections.Generic; 
 
using System.ComponentModel; 
 
using System.Data; 
 
using System.Drawing; 
 
using System.Linq; 
 
using System.Text; 
 
using System.Windows.Forms; 
 
using System.Xml.Serialization; 
 
using System.IO; 
 

 

 
namespace XML_Example 
 
{ 
 
    public partial class Form1 : Form 
 
    { 
 
     public Form1() 
 
     { 
 
      InitializeComponent(); 
 
     } 
 

 
     private void btnSerialize_Click(object sender, EventArgs e) 
 
     { 
 
      Reports reports = new Reports(); 
 
      reports.listOfReportTypes = new ListReportTypes(); 
 
      reports.listOfReportTypes.reportsType.Add(new ReportType()); 
 
      reports.listOfReportTypes.reportsType.Add(new ReportType()); 
 
      reports.listOfReportTypes.reportsType[0].name="ABCD.Record.ABC, abcd, Version=1.0.3.4, Culture=neutral, PublicKeyToken=null"; 
 
      reports.listOfReportTypes.reportsType[0].listOfReportColumns = new ListOfReportColumns(); 
 
      reports.listOfReportTypes.reportsType[0].listOfReportColumns.columnProperty.Add(new ColumnProperty()); 
 
      reports.listOfReportTypes.reportsType[0].listOfReportColumns.columnProperty.Add(new ColumnProperty()); 
 
      reports.listOfReportTypes.reportsType[0].listOfReportColumns.columnProperty.Add(new ColumnProperty()); 
 
      Serialize(reports); 
 
      Close(); 
 

 
     } 
 
     static public void Serialize(Reports reports) 
 
     { 
 
      XmlSerializer serializer = new XmlSerializer(typeof(Reports)); 
 
      using (TextWriter writer = new StreamWriter(@"C:\Users\eladh\Desktop\יצירת XML\Elad.xml")) 
 
      { 
 
       serializer.Serialize(writer, reports); 
 
      } 
 
     } 
 
    } 
 
    [XmlRoot ("Reports")] 
 
    public class Reports 
 
    { 
 
     [XmlElement ("ListReportTypes")] 
 
     public ListReportTypes listOfReportTypes { get; set; } 
 
     public Reports() { } 
 

 
    } 
 
    public class ListReportTypes 
 
    { 
 
     [XmlElement("ReportType")] 
 
     public List<ReportType> reportsType { get; set; } 
 
     public ListReportTypes() 
 
     { 
 
      reportsType = new List<ReportType>(); 
 
     } 
 

 
    } 
 
    public class ReportType 
 
    { 
 
     [XmlAttribute ("Name")] 
 
     public string name { get; set; } 
 
     [XmlElement ("ListOfReportColumns")] 
 
     public ListOfReportColumns listOfReportColumns { get; set; } 
 
     public ReportType() 
 
     { 
 
      name = string.Empty; 
 
     } 
 
    } 
 
    public class ListOfReportColumns 
 
    { 
 
     [XmlElement("ColumnProperty")] 
 
     public List<ColumnProperty> columnProperty { get; set; } 
 
     public ListOfReportColumns() 
 
     { 
 
      columnProperty = new List<ColumnProperty>(); 
 
     } 
 
    } 
 
    public class ColumnProperty 
 
    { 
 
     [XmlArrayAttribute("DBColumn")] 
 
     public string DBColumn { get; set; } 
 
     [XmlArrayAttribute("Display")] 
 
     public string Display { get; set; } 
 
     [XmlArrayAttribute("IsColumnDisplay")] 
 
     public bool IsColumnDisplay { get; set; } 
 
     [XmlArrayAttribute("IsSelectedByUser")] 
 
     public bool IsSelectedByUser { get; set; } 
 
     [XmlArrayAttribute("SelectedPosition")] 
 
     public int SelectedPosition { get; set; } 
 
     public ColumnProperty() 
 
     { 
 
      DBColumn = string.Empty; 
 
      Display = string.Empty; 
 
     } 
 
    } 
 
}

當我運行它時,它返回一個錯誤:System.InvalidOperationException

什麼是錯? 這個類或序列化有問題嗎?

回答

1

問題是,您正在使用XmlArrayAttribute而不是類ColumnProperty中的XmlAttribute。如果查看innerException/innerException/innerException(多次),則可以看到明確的錯誤消息。