2013-12-11 6 views
0

Распределенный проект «World Community Grid» имеет возможность получить подробную информацию о пользователе, такую ​​как:Как я могу превратить XML-документ в простой в использовании объект C#?

<?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&amp;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>[email protected]</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#, который можно легко использовать, потребляя пользователей?

+1

попробовать [XmlDocument] (http://msdn.microsoft.com/en-us/library/system.xml.xmldocument (v = vs.110) .aspx) – ryrich

+0

У вас есть xsd определено? вы можете использовать http://xsd2code.codeplex.com/, он интегрируется в VS. – Konstantin

ответ

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; } 
} 
-1

скопировать XML в буфер обмена, перейдите в C# файл класса, поместите курсор, где вы хотите, чтобы классы были вставлены, а затем перейдите в Edit-> Paste Special-> Paste XML как класс C#, и все готово.

+0

Э-э, нет. Этого не существует. – gunr2171

+0

Уверен, что он, по крайней мере, на VS2013 Ultimate – neo112

+0

[ссылка на img, показывающая его возможность] (http://i.imgur.com/4eQVX36.png) – neo112

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; } 
} 
0

Сначала я использую xsd.exe для создания классов из XML с использованием XSD схемы. (xsd.exe). Это создаст класс. Затем используйте Generics:

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(); 
      } 

     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^