0

サーバーからXMLファイルを受け取りました。このファイルには、多くの要素と1つの属性が含まれています。

xmlを試してシリアル化/逆シリアル化すると、属性を除くすべての要素が適切にシリアル化/逆シリアル化されます。なぜこれが起こるのですか?

XMLファイルは次のとおりです。

"<msg><msisdn>123456789</msisdn><sessionid>535232573</sessionid><phase>2</phase><request type=\"1\">*120*111#</request></msg>"

とクラス:

[Serializable]
[XmlRoot(ElementName = "msg", Namespace = "")]
public class myClass
{
    [XmlElement(ElementName = "msisdn")]
    public string number = string.Empty;
    [XmlElement(ElementName = "sessionid")]
    public string sessionID = string.Empty;
    [XmlAttribute(AttributeName = "type")]
    public string requestType = string.Empty;
    [XmlElement(ElementName = "request")]
    public string request = string.Empty;
    [XmlElement(ElementName = "phase")]
    public string phase = string.Empty;

    public override string ToString()
    {
        return number + " - " + sessionID;
    }
}

助けてくれてありがとう

4

1 に答える 1

2

ルートのtype属性ではなく、の属性であるため、リクエストのサブクラスを定義してみてください。requestMyClass

[XmlRoot(ElementName = "msg", Namespace = "")]
public class MyClass
{
    [XmlElement(ElementName = "msisdn")]
    public string Number { get; set; }

    [XmlElement(ElementName = "sessionid")]
    public string SessionID { get; set; }

    [XmlElement(ElementName = "request")]
    public Request Request { get; set; }

    [XmlElement(ElementName = "phase")]
    public string Phase { get; set; }

    public override string ToString()
    {
        return Number + " - " + SessionID;
    }
}

public class Request
{
    [XmlAttribute(AttributeName = "type")]
    public string Type { get; set; }

    [XmlText]
    public string Value { get; set; }
}

class Program
{
    static void Main()
    {
        var serializer = new XmlSerializer(typeof(MyClass));
        using (var stringReader = new StringReader("<msg><msisdn>123456789</msisdn><sessionid>535232573</sessionid><phase>2</phase><request type=\"1\">*120*111#</request></msg>"))
        using (var xmlReader = XmlReader.Create(stringReader))
        {
            var obj = (MyClass)serializer.Deserialize(xmlReader);
            Console.WriteLine(obj.Request.Type);
        }
    }
}
于 2012-05-15T14:58:40.953 に答える