2016-12-05 54 views
0

你好,我是执行XML序列化 和我得到这个错误:“有反映现场‘消息’错误”试图反序列化XML在C#

我想这是因为该元素不是必须在XML ..但不太确定。

attachig我的代码

XML代码:

<DataStructure> 
<message type="01"> 
<dataBytes position="0" description="Response description" typeOfByte="enum"> 
    <enum val="00" description="Message Legal" /> 
    <enum val="01" description="Message not Recognized" /> 
    <enum val="02" description="Message Data Invalid" /> 
    <enum val="03" description="Unused" /> 
    <enum val="04" description="Buffer Full" /> 
    <enum val="05" description="Unused" /> 
    <enum val="06" description="Notification Error" /> 
    <enum val="07" description="One-Way Network" /> 
    <enum val="08" description="Message Length Error" />  
    <enum val="09" description="Network Unavailable" /> 
    <enum val="0A" description="Node Busy" /> 
</dataBytes> 

<dataBytes position="1" description="Response data" typeOfByte="enum"> 
    <enum val="00" description="Message Legal" /> 
    <enum val="01" description="Message not Recognized" /> 
    <enum val="02" description="Message Data Invalid" /> 
    <enum val="03" description="Unused" /> 
    <enum val="04" description="Buffer Full" /> 
    <enum val="05" description="Unused" /> 
    <enum val="06" description="Notification Error"/> 
    <enum val="07" description="One-Way Network" /> 
    <enum val="08" description="Message Length Error" /> 
    <enum val="09" description="Network Unavailable" />  
    <enum val="0A" description="Node Busy" /> 
    </dataBytes> 
</message> 


<message type="30">  
<dataBytes position="0" description="Node Short ID" typeOfByte="hex"> </dataBytes> 
<dataBytes position="1" description="Node Short ID" typeOfByte="bits">  
    <bit position ="0-2" bitval="" description="Notification Period’ "></bit> 
    <bit position ="3" bitval="" description ="Listening Mode" ></bit> 
    <bit position ="4-5" typebit="enum" > 
     <Enum val="00" description="NA" ></Enum> 
     <Enum val="01" description="Poor" ></Enum> 
     <Enum val="10" description="Good" ></Enum> 
     <Enum val="11" description="Strong" ></Enum> 
    </bit> 
    <bit poistion ="6-7" description="Reserved"></bit>    
</dataBytes> 
</message> 
</DataStructure> 

C#代码:

private string readFFDDataStructureXML() 
    { 
     string OK = ""; //the error is exits 

     //perform serialazation for the XML 
     try 
     { 

      string baseDirectory = @"C:\Users\brosenfeld\Perforce\brosenfeld_TA7BarakRo_4075\System\Integration\Tools\Panalyzer\FFDProtocol\DataStructure.xml"; //get current directory 
      using (FileStream stream = new FileStream(baseDirectory, FileMode.Open)) 
      { 
       XmlSerializer XML = new XmlSerializer(typeof(DataStructurecs)); 
       _XMLFFDData = (DataStructurecs)XML.Deserialize(stream); 
      } 
     } 
     //if there is an error 
     catch (Exception err) 
     { 
      if (err.InnerException == null) 
      { 
       OK = err.Message; 
      } 

      else 
      { 
       OK = err.Message + "\n\n" + err.InnerException; 
      } 
     } 

     return OK; 

    } 







[XmlRoot("DataStructure")] 
public class DataStructurecs 
{ 

    [XmlElement("message")] 
    public List<Message> message; 

    public DataStructurecs() 
    { 
     message = new List<Message>(); 
    } 



    public class Message 
    { 
     [XmlAttribute("type")] 
     public string type; 

     [XmlElement("dataBytes")] 
     public List<dataBytes> DataBytes; 

     public Message() 
     { 
      type=""; 
      DataBytes = new List<dataBytes>(); 
     } 


     public class dataBytes 
     { 
      [XmlAttribute("position")] 
      public string position; 

      [XmlAttribute("description")] 
      public string description; 

      [XmlAttribute("typeOfByte")] 
      public string typeOfByte; 

      [XmlElement("bit")] 
      public Bits bits; 

      [XmlArrayItem("enum",(typeof (Enum)),IsNullable=trueQ)] 
      public List<Enum> ENUM; 


      public dataBytes() 
      { 
       position = ""; 
       description = ""; 
       typeOfByte = ""; 
       bits = new Bits(); 
       ENUM = new List<Enum>(); 

      } 


      public class Enum 
      { 
       [XmlAttribute("val")] 
       public string val; 

       [XmlAttribute("description")] 
       public string description; 

       public Enum() 
       { 
        val = ""; 
        description = ""; 
       } 
      } 


      public class Bits 
      { 
       [XmlAttribute("position")] 
       public string position; 

       [XmlAttribute("bitval")] 
       public string bitval; 


       [XmlAttribute("description")] 
       public string description; 


       [XmlElement("Enum")] 
       public List<Enum> BitsEnum; 

       public Bits() 
       { 
        position = ""; 
        bitval = ""; 
        description = ""; 
        BitsEnum = new List<Enum>(); 
       } 


       public class Enum 
       { 
        [XmlAttribute("val")] 
        public string val; 

        [XmlAttribute("description")] 
        public string description; 

        public Enum() 
        { 
         val = ""; 
         description = ""; 
        } 
       } 
      } 


     } 
    } 




} 
+0

你的XML格式不完整,最后一个'没有结束标记 –

+0

是否有任何内部异常?可能会告诉你更多信息 –

+0

只复制和粘贴一些XML代码来理解问题。再次编辑它。 –

回答

1

你必须改变你的数据结构,这是正确的:

[XmlRoot("DataStructure")] 
public class DataStructurecs 
{ 

    [XmlElement("message")] 
    public List<Message> Message { get; set; } 
} 

public class Message 
{ 
    [XmlAttribute("type")] 
    public string Type { get; set; } 

    [XmlElement("dataBytes")] 
    public List<DataBytes> DataBytes { get; set; } 
} 

public class DataBytes 
{ 
    [XmlAttribute("position")] 
    public string Position { get; set; } 

    [XmlAttribute("description")] 
    public string Description { get; set; } 

    [XmlAttribute("typeOfByte")] 
    public string TypeOfByte { get; set; } 

    [XmlElement("bit")] 
    public Bits Bits { get; set; } 

    [XmlElement("enum")] 
    public List<Enum> Enum { get; set; } 
} 

public class Enum 
{ 
    [XmlAttribute("val")] 
    public string Val { get; set; } 

    [XmlAttribute("description")] 
    public string Description { get; set; } 
} 


public class Bits 
{ 
    [XmlAttribute("position")] 
    public string Position { get; set; } 

    [XmlAttribute("bitval")] 
    public string Bitval { get; set; } 


    [XmlAttribute("description")] 
    public string Description { get; set; } 


    [XmlElement("Enum")] 
    public List<Enums> BitsEnum { get; set; } 
} 

public class Enums 
{ 
    [XmlAttribute("val")] 
    public string Val { get; set; } 

    [XmlAttribute("description")] 
    public string Description { get; set; } 

} 
+0

总是有用的解释为什么... –

+0

对不起^^你不需要有一个构造函数并初始化字段。 – ascholz

+1

我想这个错误是因为其他类是DataStructurecs的子类。但我不是100%肯定的。 – ascholz