如何在动态对象中使用特殊字符的字段来解决字段



我正在将XML文档转换为JSON,并从那里转换为动态对象:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText = 
JsonConvert.SerializeXmlNode(doc);
dynamic obj = JsonConvert.DeserializeObject<object>(json);

现在,最终的dynamic看起来不错。但是有几种我不如何解决的特殊情况:

  • root <?xml version="1.0" encoding="utf-8"?>元素在JSON中像这样结束(因此是Dynmaic对象(:

    "?xml": {"@version": "1.0","@encoding": "utf-8"}

  • 另一个包含(仅(属性的XML标签进入此处:

    "MyTag": {"@id": "1339", "@creationTime": "2017-11-08T19:43:09.031Z"}

那么,如何在动态对象中添加?xml@id

string id = obj.Tag.@id当然不起作用。obj.?xml

非常感谢!

使用索引器而不是将其视为属性:

dynamic xml = obj["?xml"];
dynamic tagId = obj.Tag["@id"];

话虽如此,我亲自将LINQ直接使用到XML,而不是通过JSON和Dynamic Typing进行。

在这种特定情况下,您可以这样访问它:

string id = obj.Tag["@id"]
var xml = obj["?xml"];

因为基础动态对象也具有索引器(基础对象是json.net JObject(。请注意,通常情况下,这不是真的:

dynamic obj = new {a = 1};  
var a = obj["a"]; // fails

我没有完全理解您想要的东西,但这是我前一段时间类似的事情的样本。

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml); // your XML
XmlNodeList nodes = doc.DocumentElement.SelectNodes("/"); // Your XML Nodes

Dictionary<string, object> dic = new Dictionary<string, object>(); // your 
dictionary Key, Value
foreach (XmlNode n in nodes) { 
    dic.Add(n.Name, n.InnerText); // name is your tag and InnerText or InnerXML is your value
}
json = JsonConvert.SerializeObject(dic);

希望它有帮助!

最新更新