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

时间:2019-02-12 03:11:30

标签: c# json xml json.net expandoobject

我可以毫无问题地从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个字段:

  • @值“是”的重要
  • @收到的值为“ 2019-2-12”
  • 身体价值“嗨,伙计!”

是否可以使用@前缀检索前2个字段的值?我不知道如何在动态对象上处理此@字符。

1 个答案:

答案 0 :(得分:0)

要处理动态对象中的特殊字符(例如“ @”),必须将其强制转换为` ( IDictionary )。然后,您可以将 recevied 属性作为波纹管:

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