2017-06-29 43 views
0

我想讀一個簡單的xml並通過類反序列化它。但是它爲xml中的所有參數返回空值。 任何人都可以幫我解決這個空的返回值問題,同時反序列化下面的XML。反序列化簡單的xml返回空值

<Batch> 
    <description>example</description> 
    <fileField>DesktopA</fileField> 
    <output>The</output> 
    <input>home</input> 
    <input>green</input> 
    <parameters> 
     <action>1</action> 
     <item>2</item>   
    </parameters> 
    <parameters> 
     <action>1</action> 
     <item>4</item>   
    </parametersField> 
</Batch> 

類:

[Serializable()] 
public partial class Batch { 

    private string description; 

    private string fileField; 

    private string output; 

    private string[] input; 

    private Parameter[] parameters; 

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

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

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

    /// <remarks/> 
    [XmlElement] 
    public string[] Input { 
     get { 
      return this.input; 
     } 
     set { 
      this.input = value; 
     } 
    } 

    /// <remarks/> 
    [XmlElement] 
    public Parameter[] Parameters { 
     get { 
      return this.parameters; 
     } 
     set { 
      this.parameters = value; 
     } 
    } 
} 

/// <remarks/> 

public partial class Parameter { 


    private sbyte action; 

    private object item; 



    /// <remarks/> 
    public sbyte Action { 
     get { 
      return this.action; 
     } 
     set { 
      this.action = value; 
     } 
    } 

    /// <remarks/> 
    [XmlElement] 
    public object Item { 
     get { 
      return this.item; 
     } 
     set { 
      this.item = value; 
     } 
    } 

的deserializaion方法:

XmlSerializer reader; 
       Type bt = batchInfo.GetType(); 

       reader = new XmlSerializer(bt);     
       System.IO.StreamReader file = 
        new System.IO.StreamReader(testScriptFile, System.Text.Encoding.Default);     
      batchInfo = (Batch)reader.Deserialize(file); 
+0

你的屬性,如'description'讀取時需要有一個公共的二傳手。如果你想擁有不同的屬性名稱,那麼你可以使用屬性的xml。 – NtFreX

+0

謝謝。但我從xml使用相同的名稱沒有問題。而且我不瞭解屬性,因爲我是xml新手。你可以幫我改變代碼示例? – Newbie0111

回答

0

您可以使用以下模型來反序列化您的xml。它利用了XmlElement屬性。

public class Parameter 
{ 
    [XmlElement("action")] 
    public int Action { get; set; } 
    [XmlElement("item")] 
    public int Item { get; set; } 
} 

[XmlRoot("Batch")] 
public class Batch 
{ 
    [XmlElement("description")] 
    public string Description { get; set; } 
    [XmlElement("fileField")] 
    public string FileField { get; set; } 
    [XmlElement("output")] 
    public string Output { get; set; } 
    [XmlElement("input")] 
    public List<string> Inputs { get; set; } 
    [XmlElement("parameters")] 
    public List<Parameter> Parameters { get; set; } 
} 

而通過使用此代碼,您可以執行反序列化。

var xml = @" 
    <Batch> 
     <description>example</description> 
     <fileField>DesktopA</fileField> 
     <output>The</output> 
     <input>home</input> 
     <input>green</input> 
     <parameters> 
      <action>1</action> 
      <item>2</item>   
     </parameters> 
     <parameters> 
      <action>1</action> 
      <item>4</item>   
     </parameters> 
    </Batch>"; 

var serializer = new XmlSerializer(typeof(Batch)); 
var textReader = new StringReader(xml); 
var obj = (Batch) serializer.Deserialize(textReader); 

或文件

var serializer = new XmlSerializer(typeof(Batch)); 
using (var fileStream = new FileStream(@"C:\mypath\myFile.xml", FileMode.Open)) 
{ 
    var obj = (Batch)serializer.Deserialize(fileStream); 
} 
+0

感謝您的輸入。除了列表字段,其他字段都很好。它仍然是空的。 – Newbie0111

+0

@Sanga當我在我的答案中使用xml運行它時,它有效。也許這個xml和你發佈的不一樣? – NtFreX

+0

我使用的Xml是相同的,但我必須輸入它作爲文件而不是變量。我想這可能會導致這個問題。是否可以使用xml作爲文件輸入。如果是這樣,你可以相應地改變反序列化部分嗎? – Newbie0111

0

如果你正確地檢查你的XML,你可以看到有你的參數有問題。你有,但它應該是

<Batch> 
    <description>example</description> 
    <fileField>DesktopA</fileField> 
    <output>The</output> 
    <input>home</input> 
    <input>green</input> 
    <parameters> 
     <action>1</action> 
     <item>2</item>   
    </parameters> 
    <parameters> 
     <action>1</action> 
     <item>4</item>   
    </parameters> 
</Batch> 

希望它有幫助!

+0

感謝您的注意。但修復它也無濟於事。長寧向公衆提供的物業幫助。但我需要限制其他變量的訪問,然後反序列化。對此有何想法? – Newbie0111