分布式项目“World Community Grid”能够获取详细的用户信息,例如:
<?xml version="1.0" encoding="UTF-8"?>
<MemberStatsWithTeamHistory>
<MemberStats>
<MemberStat>
<Name>makerofthings7</Name>
<MemberId>876300</MemberId>
<TeamId>0QGNJ4D832</TeamId>
<RegisterDate>2013-12-08</RegisterDate>
<LastResult>2013-12-11T11:58:51</LastResult>
<NumDevices>4</NumDevices>
<StatisticsTotals>
<RunTime>1290126</RunTime>
<RunTimeRank>415174</RunTimeRank>
<Points>61710</Points>
<PointsRank>293387</PointsRank>
<Results>175</Results>
<ResultsRank>282858</ResultsRank>
</StatisticsTotals>
<StatisticsAverages>
<RunTimePerDay>322532</RunTimePerDay>
<RunTimePerResult>7372</RunTimePerResult>
<PointsPerHourRunTime>172.19713423320002</PointsPerHourRunTime>
<PointsPerDay>15427.5</PointsPerDay>
<PointsPerResult>352.62857142857104</PointsPerResult>
<ResultsPerDay>43.75</ResultsPerDay>
</StatisticsAverages>
<Resource>
<Url>http://www.worldcommunitygrid.org/stat/viewMemberInfo.do?userName=makerofthings7&xml=true</Url>
<Description>makerofthings7</Description>
</Resource>
</MemberStat>
</MemberStats>
<TeamHistory>
<Team>
<Name>Ripple Labs</Name>
<TeamId>0QGNJ4D832 </TeamId>
<JoinDate>2013-12-08</JoinDate>
<StatisticsTotals>
<RunTime>688331</RunTime>
<Points>33548</Points>
<Results>99</Results>
</StatisticsTotals>
</Team>
</TeamHistory>
<MemberStatsByProjects>
<Project> <ProjectName>Mapping Cancer Markers</ProjectName>
<ProjectShortName>mcm1</ProjectShortName>
<RunTime>518163</RunTime>
<Points>22918</Points>
<Results>39</Results>
</Project> <Project> <ProjectName>The Clean Energy Project - Phase 2</ProjectName>
<ProjectShortName>cep2</ProjectShortName>
<RunTime>61555</RunTime>
<Points>3422</Points>
<Results>4</Results>
</Project> <Project> <ProjectName>FightAIDS@Home</ProjectName>
<ProjectShortName>faah</ProjectShortName>
<RunTime>710408</RunTime>
<Points>35370</Points>
<Results>132</Results>
</Project> </MemberStatsByProjects>
</MemberStatsWithTeamHistory>
我能够通过这里获得这个XML:
http://www.worldcommunitygrid.org/verifyMember.do?name=makerofthings7&code=SECRET CODE HERE
然后提取每个人唯一的密码from this page。
由于这是一个很好的原因,我想鼓励其他人使用这个API并“竞争”治愈。
问题
如何获取此XML文件并将其转换为易于被用户使用的C#类?
答案 0 :(得分:1)
您可以使用XmlSerialzier ....
XmlSerializer serializer = new XmlSerializer(typeof(MemberStatsWithTeamHistory));
var obj = serializer.Deserialize(File.OpenRead(fname)) as MemberStatsWithTeamHistory;
PS:这与@ AydinAdn的回答不一样。例如,我更改了MemberStatsByProjects定义以使其正常工作
public class StatisticsTotals
{
public string RunTime { get; set; }
public string RunTimeRank { get; set; }
public string Points { get; set; }
public string PointsRank { get; set; }
public string Results { get; set; }
public string ResultsRank { get; set; }
}
public class StatisticsAverages
{
public string RunTimePerDay { get; set; }
public string RunTimePerResult { get; set; }
public string PointsPerHourRunTime { get; set; }
public string PointsPerDay { get; set; }
public string PointsPerResult { get; set; }
public string ResultsPerDay { get; set; }
}
public class Resource
{
public string Url { get; set; }
public string Description { get; set; }
}
public class MemberStat
{
public string Name { get; set; }
public string MemberId { get; set; }
public string TeamId { get; set; }
public string RegisterDate { get; set; }
public string LastResult { get; set; }
public string NumDevices { get; set; }
public StatisticsTotals StatisticsTotals { get; set; }
public StatisticsAverages StatisticsAverages { get; set; }
public Resource Resource { get; set; }
}
public class MemberStats
{
public MemberStat MemberStat { get; set; }
}
public class StatisticsTotals2
{
public string RunTime { get; set; }
public string Points { get; set; }
public string Results { get; set; }
}
public class Team
{
public string Name { get; set; }
public string TeamId { get; set; }
public string JoinDate { get; set; }
public StatisticsTotals2 StatisticsTotals { get; set; }
}
public class TeamHistory
{
public Team Team { get; set; }
}
public class Project
{
public string ProjectName { get; set; }
public string ProjectShortName { get; set; }
public string RunTime { get; set; }
public string Points { get; set; }
public string Results { get; set; }
}
public class MemberStatsWithTeamHistory
{
public MemberStats MemberStats { get; set; }
public TeamHistory TeamHistory { get; set; }
public List<Project> MemberStatsByProjects { get; set; }
}
答案 1 :(得分:0)
我将它从xml转换为json http://www.utilities-online.info/xmltojson/#.Uqi40eIa6So
从json到csharp:http://json2csharp.com/
希望有所帮助:)
public class StatisticsTotals
{
public string RunTime { get; set; }
public string RunTimeRank { get; set; }
public string Points { get; set; }
public string PointsRank { get; set; }
public string Results { get; set; }
public string ResultsRank { get; set; }
}
public class StatisticsAverages
{
public string RunTimePerDay { get; set; }
public string RunTimePerResult { get; set; }
public string PointsPerHourRunTime { get; set; }
public string PointsPerDay { get; set; }
public string PointsPerResult { get; set; }
public string ResultsPerDay { get; set; }
}
public class Resource
{
public string Url { get; set; }
public string Description { get; set; }
}
public class MemberStat
{
public string Name { get; set; }
public string MemberId { get; set; }
public string TeamId { get; set; }
public string RegisterDate { get; set; }
public string LastResult { get; set; }
public string NumDevices { get; set; }
public StatisticsTotals StatisticsTotals { get; set; }
public StatisticsAverages StatisticsAverages { get; set; }
public Resource Resource { get; set; }
}
public class MemberStats
{
public MemberStat MemberStat { get; set; }
}
public class StatisticsTotals2
{
public string RunTime { get; set; }
public string Points { get; set; }
public string Results { get; set; }
}
public class Team
{
public string Name { get; set; }
public string TeamId { get; set; }
public string JoinDate { get; set; }
public StatisticsTotals2 StatisticsTotals { get; set; }
}
public class TeamHistory
{
public Team Team { get; set; }
}
public class Project
{
public string ProjectName { get; set; }
public string ProjectShortName { get; set; }
public string RunTime { get; set; }
public string Points { get; set; }
public string Results { get; set; }
}
public class MemberStatsByProjects
{
public List<Project> Project { get; set; }
}
public class MemberStatsWithTeamHistory
{
public MemberStats MemberStats { get; set; }
public TeamHistory TeamHistory { get; set; }
public MemberStatsByProjects MemberStatsByProjects { get; set; }
}
public class RootObject
{
public MemberStatsWithTeamHistory MemberStatsWithTeamHistory { get; set; }
}
答案 2 :(得分:0)
首先,我使用xsd.exe使用模式XSD从xml创建类。 (xsd.exe)。这将创建一个类。然后使用泛型:
public class XmlSerializer<T>
{
/// <summary>
/// Load a Xml File and Deserialize into and object
/// </summary>
/// <param name="xml">Xml String</param>
/// <returns>Object representing the xml. You should catch an InvalidCastException</returns>
public T DeserializeXmlProductContent(String xml)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
T obj;
using (StringReader reader = new StringReader(xml))
{
obj = (T)serializer.Deserialize(reader);
}
return obj;
}
/// <summary>
/// Serialize an Object to a Xml String
/// </summary>
/// <param name="obj">Any Object</param>
/// <returns>Xml String</returns>
public String SerializeProductContentToXml(T obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
}
答案 3 :(得分:-1)
将XML复制到剪贴板,转到C#类文件,将光标放在要粘贴类的位置,然后转到Edit-&gt; Paste Special-&gt;将XML粘贴为C#类,你就完成了