我试图解析这个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>
你可以看到&#34; Wind&#34;元素出现两次,这给了我很多时间,因为我显然不能容纳两个名为相同的变量。
我尝试通过编号元素来解决这个问题,而我的反序列化类现在看起来像这样:
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; }
}
现在问题还在继续.. 它将所有元素反序列化,直到第二个&#34; Wind&#34;正确地,在第二次&#34;风&#34; (包括)其余的元素是&#39; null&#39; 有什么建议吗?
答案 0 :(得分:5)
这样可行,只需将风作为阵列:
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; }
}
}