从字符串 C# 中解析 XML
Parsing XML from string C#
我正在尝试使用此 XML
反序列化字符串 response.Content
<?xml version="1.0" encoding="utf-8"?><root><uri><![CDATA[http://api.bart.gov/api/stn.aspx?cmd=stns]]></uri><stations><station><name>12th St. Oakland City Center</name><abbr>12TH</abbr><gtfs_latitude>37.803664</gtfs_latitude><gtfs_longitude>-122.271604</gtfs_longitude><address>1245 Broadway</address><city>Oakland</city><county>alameda</county><state>CA</state><zipcode>94612</zipcode></station>
我正在使用这段代码反序列化它:
var serializer = new XmlSerializer(typeof(Stations), new XmlRootAttribute("root"));
Stations result;
using (TextReader reader = new StringReader(response.Content))
{
result = (Stations)serializer.Deserialize(reader);
}
然后我在此处声明 Stations
class
[XmlRoot]
public class Stations
{
[XmlElement]
public string name;
}
然而,我的name
是空的。知道为什么吗?
Stations 是 Station 对象的列表。 Stations 没有名为 Name 的元素,只有 Station 有。
你可能应该做类似
的事情
public Station[] Stations
在根目录中-class。
然后定义一个名为 Station 的新 class,名称为 属性。
Stations
不应该是 class,它应该是 Station
个元素的集合。
在使用 XmlSerializer
时,您应该使用 类 模仿所有 xml 结构。
[XmlRoot(ElementName = "root")]
public class Root
{
[XmlArray(ElementName = "stations"), XmlArrayItem(ElementName = "station")]
public Station[] Stations { get; set; }
}
public class Station
{
[XmlElement(ElementName = "name")]
public string Name { get; set; }
}
然后你可以用那种方式反序列化你的数据。
var data = ""; //your xml goes here
var serializer = new XmlSerializer(typeof(Root));
using (var reader = new StringReader(data))
{
var root = (Root)serializer.Deserialize(reader);
}
我正在尝试使用此 XML
反序列化字符串response.Content
<?xml version="1.0" encoding="utf-8"?><root><uri><![CDATA[http://api.bart.gov/api/stn.aspx?cmd=stns]]></uri><stations><station><name>12th St. Oakland City Center</name><abbr>12TH</abbr><gtfs_latitude>37.803664</gtfs_latitude><gtfs_longitude>-122.271604</gtfs_longitude><address>1245 Broadway</address><city>Oakland</city><county>alameda</county><state>CA</state><zipcode>94612</zipcode></station>
我正在使用这段代码反序列化它:
var serializer = new XmlSerializer(typeof(Stations), new XmlRootAttribute("root"));
Stations result;
using (TextReader reader = new StringReader(response.Content))
{
result = (Stations)serializer.Deserialize(reader);
}
然后我在此处声明 Stations
class
[XmlRoot]
public class Stations
{
[XmlElement]
public string name;
}
然而,我的name
是空的。知道为什么吗?
Stations 是 Station 对象的列表。 Stations 没有名为 Name 的元素,只有 Station 有。
你可能应该做类似
的事情 public Station[] Stations
在根目录中-class。
然后定义一个名为 Station 的新 class,名称为 属性。
Stations
不应该是 class,它应该是 Station
个元素的集合。
在使用 XmlSerializer
时,您应该使用 类 模仿所有 xml 结构。
[XmlRoot(ElementName = "root")]
public class Root
{
[XmlArray(ElementName = "stations"), XmlArrayItem(ElementName = "station")]
public Station[] Stations { get; set; }
}
public class Station
{
[XmlElement(ElementName = "name")]
public string Name { get; set; }
}
然后你可以用那种方式反序列化你的数据。
var data = ""; //your xml goes here
var serializer = new XmlSerializer(typeof(Root));
using (var reader = new StringReader(data))
{
var root = (Root)serializer.Deserialize(reader);
}