在xml中反序列化子元素

时间:2012-10-22 22:10:48

标签: c# .net xml deserialization

我应该如何正确地反序列化<site-standard-profile-request>子元素,使其不显示为null?

反序列化过程非常完美;我只需要将子元素<site-standard-profile-request>也序列化。

 //<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
    //- <person>
    //  <first-name>Storefront</first-name> 
    //  <last-name>Doors</last-name> 
    //  <headline>CEO at StorefrontDoors.NET</headline> 
    //- <site-standard-profile-request>
    //  <url>http://www.linkedin.com/profile?viewProfile=&key=147482099&authToken=-Igm&authType=name&trk=api*a216630*s224617*</url> 
    //  </site-standard-profile-request>
    //  </person>
    [XmlRoot("person")]
    [Serializable()]
    public class LinkedIn
    {
        [XmlElement("first-name")]
        public string FirstName { get; set; }
        [XmlElement("last-name")]
        public string LastName { get; set; }
        [XmlElement("headline")]
        public string Headline { get; set; }
        public string URL { get; set; }
    }


 string profile = oauth.APIWebRequest("GET", "https://api.linkedin.com/v1/people/~", null);
        //

        LinkedIn lkIn = null;

        BufferedStream stream = new BufferedStream(new MemoryStream());
        stream.Write(Encoding.ASCII.GetBytes(profile), 0, profile.Length);
        stream.Seek(0, SeekOrigin.Begin);
        StreamReader sr = new StreamReader(stream);
        XmlSerializer serializer = new XmlSerializer(typeof(LinkedIn));

        lkIn = (LinkedIn)serializer.Deserialize(sr);
        stream.Close();

1 个答案:

答案 0 :(得分:1)

您需要另一个可序列化的类,只需将url作为属性。例如,

[XmlRoot("site-standard-profile-request")]
[Serializable()]
public class StandardProfile
{
    public string url { get;set;}
}

然后你现有的类应该使用它,比如

[XmlRoot("person")]
[Serializable()]
public class LinkedIn
{
    [XmlElement("first-name")]
    public string FirstName { get; set; }
    [XmlElement("last-name")]
    public string LastName { get; set; }
    [XmlElement("headline")]
    public string Headline { get; set; }

    public StandardProfile Profile { get;set; }
}

我没有测试过这段代码,但应该非常接近。

希望有所帮助。