如何仅使用C#中的属性反序列化xml元素?

时间:2016-03-09 10:08:46

标签: c# xml windows windows-phone-8

我正在使用System.Xml.Serialization.XmlSerializer类。我需要在C#中反序列化以下XML:

<message from="abc" to="xyz" xml:lang="en" id="Vx4Ix-14" type="chat">
   <received xmlns="urn:xmpp:receipts" id="9beea4d7-aa1e-4f3c-929c-712b56164b63"/>
</message>

以下是我要反序列化的类:

[XmlRoot(ElementName = "message")]
public class Message
  {
    [XmlAttribute(AttributeName = "type")]
    public string Type { get; set; }

    [XmlAttribute(AttributeName = "from")]
    public string From { get; set; }

    [XmlAttribute(AttributeName = "to")]
    public string To { get; set; }

    [XmlAttribute(AttributeName = "id")]
    public string Id { get; set; }

    [XmlAttribute(AttributeName = "xml:lang")]
    public string Language { get; set; }

    [XmlElement(ElementName = "received", Namespace = "urn:xmpp:receipts")]
    public Received Received { get; set; } 
}

public class Received
{
    [XmlAttribute(AttributeName = "id")]
    public string Id { get; set; }
}

“received”xml元素只有属性,我希望反序列化该元素以获得该元素的“id”值。 但是当我使用上面的类来反序列化时,我得到除“id”属性值之外的所有值“received”xml元素。我将Received属性的值设为null。

请让我知道我班上有什么问题?

这是我的解串器方法:

   public static T Deserialize<T>(string xml)
    {
        T deserializedObject = default(T);
        try
        {

            var serializer = new XmlSerializer(typeof(T));
            using (var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
            {
                deserializedObject = (T)serializer.Deserialize(memoryStream);
            }
            return deserializedObject;
        }
        catch (Exception)
        {
            return deserializedObject;
        }
    }

1 个答案:

答案 0 :(得分:0)

你的课看起来很好,也适合我。也许你没有正确使用解串器!?我用这样的XML成功地尝试了它:

var serializer = new XmlSerializer(typeof(Message));
var message = (Message)serializer.Deserialize(
    new FileStream(@"C:\Users\homann.k\Desktop\test.xml", FileMode.Open, FileAccess.Read));