繁体   English   中英

如何解决动态对象中带有特殊字符的字段?

[英]How to address fields with special characters in dynamic object?

我正在将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中(并因此在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和动态类型。

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

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);

希望对您有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM