2015-02-11 78 views
1

我試着去解析這個XML響應:反序列化在C#中的多個同名的XML元素

<?xml version="1.0" encoding="utf-16"?> 
<CurrentWeather> 
    <Location>BOSTON LOGAN INTERNATIONAL, MA, United States (KBOS) 42-22N 071-01W 54M</Location> 
    <Time>Feb 11, 2015 - 11:54 AM EST/2015.02.11 1654 UTC</Time> 
    <Wind> from the N (010 degrees) at 17 MPH (15 KT) gusting to 26 MPH (23 KT):0</Wind> 
    <Visibility> 2 mile(s):0</Visibility> 
    <SkyConditions> overcast</SkyConditions> 
    <Temperature> 19.9 F (-6.7 C)</Temperature> 
    <Wind>Windchill: 5 F (-15 C):1</Wind> 
    <DewPoint> 12.9 F (-10.6 C)</DewPoint> 
    <RelativeHumidity> 73%</RelativeHumidity> 
    <Pressure> 30.08 in. Hg (1018 hPa)</Pressure> 
    <Status>Success</Status> 
</CurrentWeather> 

正如你可以看到「風」元素出現了兩次,這就是讓我很難,因爲我明顯不能容納2個命名相同的變量。

我試着通過編號的元素解決這個問題,我的反序列化類現在看起來是這樣的:

public class CurrentWeather 
{ 
    [XmlElement(Order = 1)] 
    public string Location { get; set; } 
    [XmlElement(Order = 2)] 
    public string Time { get; set; } 
    [XmlElement(Order = 3)] 
    public string Wind { get; set; } 
    [XmlElement(Order = 4)] 
    public string Visibility { get; set; } 
    [XmlElement(Order = 5)] 
    public string SkyConditions { get; set; } 
    [XmlElement(Order = 6)] 
    public string Temperature { get; set; } 
    [XmlElement(Order = 7)] 
    public string WindTemperature { get; set; } 
    [XmlElement(Order = 8)] 
    public string DewPoint { get; set; } 
    [XmlElement(Order = 9)] 
    public string RelativeHumidity { get; set; } 
    [XmlElement(Order = 10)] 
    public string Pressure { get; set; } 
    [XmlElement(Order = 11)] 
    public string Status { get; set; } 
} 

現在的問題仍然.. 它反序列化,直到所有元素第二個「風」正確,並在第二個「風」(包括)後的其他元素是'空' 任何建議?

+0

https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlarrayattribute%28v=vs.110%29 .aspx – Jodrell 2015-02-11 17:48:07

回答

4

這個工作,只是讓風數組:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace WindDeserialize 
{ 
    using System.IO; 
    using System.Xml.Serialization; 

    class Program 
    { 
     public const string xml = "<?xml version=\"1.0\" encoding=\"utf-16\"?>        "+ 
"<CurrentWeather>                    "+ 
" <Location>BOSTON LOGAN INTERNATIONAL, MA, United States (KBOS) 42-22N 071-01W 54M</Location> "+ 
" <Time>Feb 11, 2015 - 11:54 AM EST/2015.02.11 1654 UTC</Time>        "+ 
" <Wind> from the N (010 degrees) at 17 MPH (15 KT) gusting to 26 MPH (23 KT):0</Wind>   "+ 
" <Visibility> 2 mile(s):0</Visibility>              "+ 
" <SkyConditions> overcast</SkyConditions>              "+ 
" <Temperature> 19.9 F (-6.7 C)</Temperature>             "+ 
" <Wind>Windchill: 5 F (-15 C):1</Wind>              "+ 
" <DewPoint> 12.9 F (-10.6 C)</DewPoint>              "+ 
" <RelativeHumidity> 73%</RelativeHumidity>             "+ 
" <Pressure> 30.08 in. Hg (1018 hPa)</Pressure>            "+ 
" <Status>Success</Status>                  "+ 
"</CurrentWeather>                    "; 
     static void Main(string[] args) 
     { 
      XmlSerializer ser = new XmlSerializer(typeof(CurrentWeather)); 

      var weather = (CurrentWeather)ser.Deserialize(new StringReader(xml)); 

     } 


    } 

    public class CurrentWeather 
    { 
     [XmlElement] 
     public string Location { get; set; } 
     [XmlElement] 
     public string Time { get; set; } 
     [XmlElement] 
     public string [] Wind { get; set; } 
     [XmlElement] 
     public string Visibility { get; set; } 
     [XmlElement] 
     public string SkyConditions { get; set; } 
     [XmlElement] 
     public string Temperature { get; set; } 
     [XmlElement] 
     public string DewPoint { get; set; } 
     [XmlElement] 
     public string RelativeHumidity { get; set; } 
     [XmlElement] 
     public string Pressure { get; set; } 
     [XmlElement] 
     public string Status { get; set; } 
    } 
} 
+0

它不適合我..我不能理解問題Oo – 2015-02-11 17:53:19

+0

刪除數字使它工作,非常感謝 – 2015-02-11 17:55:30

+1

風元素將填充2個元素。 這是一個小提琴:https://dotnetfiddle.net/wg6xFR – 2015-02-11 17:57:59