2011-05-20 32 views
3

任何人都可以给我一些建议吗? 一个我咨询API生成这样的模式:XML到C#类

<?xml version="1.0"?> 
<ChatXMLResult> 
    <Generator>AppServer.network.lcpdfr.com</Generator> 
    <Version>1000</Version> 
    <Time>1305910998</Time> 
    <Signature>a0f1f6bea66f75de574babd242e68c47</Signature> 
    <FilteredResultSet>1</FilteredResultSet> 
    <Messages> 
     <Message> 
      <ID>1</ID> 
      <UID>9</UID> 
      <DisplayName>Jay</DisplayName> 
      <UserName>jaymac407</UserName> 
      <Time>1305900497</Time> 
      <Area>Masterson St</Area> 
      <Message>Test</Message> 
      <TargettedMessage>false</TargettedMessage> 
      <Targets> 
       <Target>#Global Chat#</Target> 
      </Targets> 
      <Signature>1cfdff1aaa520348d0a62c87ae9717d3</Signature> 
     </Message> 
    </Messages> 
</ChatXMLResult> 

如何,我可以得到的所有消息来自这在C#?

回答

4

Attributes that control XML Serialization,例如:

[XmlRoot("ChatXMLResult")] 
public class Chat 
{ 
    [XmlElement("Signature")] // optional 
    public string Signature { get; set; } 

    [XmlArray] 
    [XmlArrayItem(typeof(Message), ElementName="Message")] 
    public Message[] Messages { get; set; } 
} 

public class Message { .. } 


我也看到了共同的元素,<Signature />,从而可以引入一个父类:

public abstract class SignedObject 
{ 
    public string Signature { get; set; } 
} 
+0

非常感谢您的帮助。 – 2011-05-20 17:24:35

+0

@Rt:很高兴帮助! :) – abatishchev 2011-05-20 17:26:35

4

您可以使用Linq to XML将xml加载到匿名对象中,或者可以创建一个要加载值的对象。

var doc = XDocument.Parse(xml); 

var messages = from m in doc.Descendants("Message") 
    select new { 
     ID = (string)m.Element("ID"), 
     UID = (string)m.Element("UID"), 
     DisplayName = (string)m.Element("DisplayName"), 
     // etc 
     Signature = (string)m.Element("Signature") 
    }; 
+0

也可以给这个去,欢呼声。 – 2011-05-20 17:24:55