如何从动态对象中获取反序列化的 xml 属性

How to get deserialized xml attribute from dynamic object

我可以毫无问题地从 expandoobject 获取元素 innertext。我不知道如何获取属性的值。

通过 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 个字段:

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

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

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