如何反序列化 C# 中只有属性的 xml 元素?
Posted
技术标签:
【中文标题】如何反序列化 C# 中只有属性的 xml 元素?【英文标题】:How to Deserialize an xml element with only attributes in C#? 【发布时间】:2016-06-23 15:31:36 【问题描述】:我正在使用 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”值。 但是当我使用上面的类进行 Deserialize 时,我得到了除“received”xml 元素的“id”属性值之外的所有值。我将 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;
【问题讨论】:
我在一个简单的 VS2015 控制台应用程序(不是 windows phone)中测试了你的类,它运行良好。你的反序列化代码是什么样子的? 我已经用我使用的反序列化方法更新了这个问题。你是对的,我的方法有问题。控制台应用程序运行良好。 我刚刚尝试了您的“反序列化”方法,并且在控制台应用程序中也可以正常工作。你能展示你用来调用“反序列化”的代码吗? XMLSerializer.Deserialize你的课看起来不错,也适合我。也许您没有正确使用反序列化器!?我用你的 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));
【讨论】:
我已经用我使用的反序列化方法更新了这个问题。你能检查一下它有什么问题吗?以上是关于如何反序列化 C# 中只有属性的 xml 元素?的主要内容,如果未能解决你的问题,请参考以下文章