Класс XML в C # - PullRequest
3 голосов
/ 20 мая 2011

Может кто-нибудь дать мне совет?API, к которому я обращаюсь, генерирует шаблон, подобный следующему:

<?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 #?

Ответы [ 3 ]

4 голосов
/ 20 мая 2011

См. Атрибуты, управляющие сериализацией XML , например:

[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; }
}
4 голосов
/ 20 мая 2011

Вы можете использовать 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")
    };
1 голос
/ 20 мая 2011

Вы можете попробовать это: http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization

...