如何从动态对象中获取反序列化的 xml 属性
Posted
技术标签:
【中文标题】如何从动态对象中获取反序列化的 xml 属性【英文标题】:How to get deserialized xml attribute from dynamic object 【发布时间】:2019-07-05 15:22:13 【问题描述】:我可以毫无问题地从 expandoobject 获取元素内部文本。我不知道如何获取属性的值。
通过Console.WriteLine(obj.Message.Body)
,我可以在body元素中得到预期的字符串。
private void TestXML()
string xmlString = @"<?xml version=""1.0"" encoding=""utf-8""?><Message important=""yes"" recevied=""2019-2-12""><Body>Hi there fella!</Body></Message>";
XDocument doc = XDocument.Parse(xmlString);
string json = JsonConvert.SerializeXNode(doc);
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json);
Console.WriteLine(obj.Message);
我进行了调试,在 obj.Message
下我可以看到 3 个字段:
有没有办法用 @ 前缀检索前 2 个字段的值?我不知道如何处理动态对象上的这个 @ 字符。
【问题讨论】:
你为什么要这样序列化它? 我从这里得到它:***.com/questions/13171525/…,对我来说是最简单的方法,因为我也在使用 json 格式。 【参考方案1】:要处理特殊字符,例如动态对象中的“@”,必须将其强制转换为` (字典)。然后你可以得到 recevied 属性如下:
var received = ((IDictionary<string, object>)obj.Message)["@recevied"];
【讨论】:
这行得通。我可以成功获得价值。如果我想返回属性“recevied”(刚刚意识到拼写错误)怎么办? 您应该检查字典中的键以确保完全符合您的预期属性。 打败我。我用List<string> keys = new List<string>(((IDictionary<string, object>)obj.Message).Keys)
谢谢你的帮助。以上是关于如何从动态对象中获取反序列化的 xml 属性的主要内容,如果未能解决你的问题,请参考以下文章