我正在将XML文档转换为JSON,并从那里转换为动态对象:
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string jsonText =
JsonConvert.SerializeXmlNode(doc);
dynamic obj = JsonConvert.DeserializeObject<object>(json);
现在大部分结果dynamic
看起来很好。但是有一些特殊情况我不知道如何处理:
根<?xml version="1.0" encoding="utf-8"?>
元素在JSON(因此是动态对象)中以此结尾:
"?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
。
非常感谢!
答案 0 :(得分:2)
使用索引器而不是将其视为属性:
dynamic xml = obj["?xml"];
dynamic tagId = obj.Tag["@id"];
话虽如此,我个人直接使用LINQ to XML,而不是通过JSON和动态输入。
答案 1 :(得分:2)
在这种特定情况下,您可以像这样访问它:
string id = obj.Tag["@id"]
var xml = obj["?xml"];
因为底层动态对象也有索引器(底层对象是json.net JObject
)。请注意,在一般情况下,情况并非如此:
dynamic obj = new {a = 1};
var a = obj["a"]; // fails
答案 2 :(得分:0)
我并不完全明白你想要的是什么,但这是我前一段时间做过类似事情的样本。
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);
希望有所帮助!