如何从动态对象反序列化的XML属性

问题描述 投票:0回答:1

我可以从expandoobject的innerText没有任何问题的元素。我无法弄清楚如何获得属性的值。

通过这样做Console.WriteLine(obj.Message.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与价值“是”
  • 与价值@received“2019年2月12日”
  • 机身采用值“嗨家伙!”

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

c# json xml json.net expandoobject
1个回答
3
投票

为了应对特殊字符,如动态对象“@”,则必须将它转换成`(IDictionary的)。然后你就可以得到recevied属性波纹管:

var received = ((IDictionary<string, object>)obj.Message)["@recevied"];
© www.soinside.com 2019 - 2024. All rights reserved.