C# 如何将XML从外部API加载到本地对象
我正在尝试使用URL将XML从外部web服务加载到对象中: 根据我在网上找到的与此相关的内容,我已经创建了对象,并添加了XMLRoot和XMLElement属性:C# 如何将XML从外部API加载到本地对象,c#,xml,C#,Xml,我正在尝试使用URL将XML从外部web服务加载到对象中: 根据我在网上找到的与此相关的内容,我已经创建了对象,并添加了XMLRoot和XMLElement属性: public class Member { [XmlElement("DisplayAs")] string DisplayAs { get; set; } [XmlElement("ListAs")] string ListAs { get; set; }
public class Member
{
[XmlElement("DisplayAs")]
string DisplayAs { get; set; }
[XmlElement("ListAs")]
string ListAs { get; set; }
[XmlElement("FullTitle")]
string FullTitle { get; set; }
[XmlElement("LayingMinisterName")]
string LayingMinisterName { get; set; }
[XmlElement("DateOfBirth")]
string DateOfBirth { get; set; }
[XmlElement("DateOfDeath")]
string DateOfDeath { get; set; }
[XmlElement("Gender")]
string Gender { get; set; }
[XmlElement("Party")]
string Party { get; set; }
[XmlElement("House")]
string House { get; set; }
[XmlElement("MemberFrom")]
string MemberFrom { get; set; }
[XmlElement("HouseStartDate")]
string HouseStartDate { get; set; }
[XmlElement("HouseEndDate")]
string HouseEndDate { get; set; }
[XmlElement("CurrentStatus")]
CurrentStatus CurrentStatus { get; set; }
}
public class CurrentStatus
{
[XmlElement("Name")]
string Name { get; set; }
[XmlElement("Reason")]
string Reason { get; set; }
[XmlElement("StartDate")]
string StartDate { get; set; }
}
[XmlRoot("Members")]
public class Members
{
[XmlElement("Member")]
List<Member> MemberList { get; set; }
}
但我似乎无法在网上找到任何可以让我从这里开始用XML数据填充对象的东西。有人能给我建议最好的方法吗,或者直接给我看一篇教程或文章,向我展示如何做到这一点吗?第一个问题是,您的模型应该具有公共属性,并带有setter和getter,XML反序列化器才能工作。 更改之后,请使用以下代码:
string Url = "http://data.parliament.uk/membersdataplatform/services/mnis/members/query/fymp=ST1";
XmlTextReader reader = new XmlTextReader(Url);
var serializer = new XmlSerializer(typeof(Members));
var members = (Members)serializer.Deserialize(reader);
使用将XML作为字符串获取
WebClient client = new WebClient();
string xml= client.DownloadString(address);
然后将XML字符串反序列化为类的实例
var serializer = new XmlSerializer(typeof(Members));
using (var reader = new StringReader(xml))
{
var members= (Members)serializer.Deserialize(reader);
}
您必须使用某种类型的
HttpClient
。。。这里是您需要使用XML序列化程序将数据转换为您的对象。这可能是我的愚蠢-但我认为他们已经有了公共getter和setter<代码>字符串显示为{get;set;}-默认情况下这些不是公共的,并且不是getter和setter的缩写。默认情况下,类成员是私有的(即,如果省略访问修饰符),那么将它们更改为pubic应该可以解决这个问题吗?{get;set;}
是否正常?是的。将它们改为公共应该可以解决这个问题。谢谢@ZoharPeled
var serializer = new XmlSerializer(typeof(Members));
using (var reader = new StringReader(xml))
{
var members= (Members)serializer.Deserialize(reader);
}