【问题标题】:How to get deserialized xml attribute from dynamic object如何从动态对象中获取反序列化的 xml 属性
【发布时间】: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 个字段:

  • @important 值为“yes”
  • @received 值为“2019-2-12”
  • 具有“嗨,伙计!”值的正文

有没有办法用 @ 前缀检索前 2 个字段的值?我不知道如何处理动态对象上的这个 @ 字符。

【问题讨论】:

标签: c# json xml json.net expandoobject


【解决方案1】:

要处理特殊字符,例如动态对象中的“@”,必须将其强制转换为` (字典)。然后你可以得到 recevied 属性如下:

var received = ((IDictionary<string, object>)obj.Message)["@recevied"];

【讨论】:

  • 这行得通。我可以成功获得价值。如果我想返回属性“recevied”(刚刚意识到拼写错误)怎么办?
  • 您应该检查字典中的键以确保完全符合您的预期属性。
  • 打败我。我用List&lt;string&gt; keys = new List&lt;string&gt;(((IDictionary&lt;string, object&gt;)obj.Message).Keys)谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多