在项目中遇到了几个的关于XML与JSON互相转化的小问题,特总结如下:
- 解析出来的JSON字符串全都带@符号
先贴一段代码,如下为xml文件转JSON字符串的代码:
首先关于xml文件解析成JSON文件后,所有JSON节点前均带有@符号,只有一种情况会出现这种情况,即XML文件的格式为如下格式时才会出现:示例代码如下:string path = HostingEnvironment.MapPath(string.Format("~/App_Data/Kendoui/{0}.xml", fileName)); XmlDocument doc = new XmlDocument(); doc=doc.Load(path); string jsonText=JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None);
这样的XML文件使用如上转JSON的方法序列化之后,所有属性均带有@符号,如果XML定义的格式如下,则不会出现@符号,示例代码如下:<item name="display" cname="是否可见" viewType="select" summary="" defaultValue="block" currentValue="block" />
至今无法找到解决方案,希望大神看到之后,能给出解决方案,我采用了一种极端的处理方式,即使用正则表达式替换,自我感觉这种方式欠妥,代码如下:<name>张三</name>
string jsonText = Regex.Replace(JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None), "(?<=\")(@)(?!.*\":\\s )", string.Empty, RegexOptions.IgnoreCase);
- 关于XML父亲节点下只有一个子节点,采用如上方法进行JSON序列化后,XML子节点并未被序列化为数组,而是一个对象
在网上百度之后,看到大神的解决方案,即在XML文件的头部增加如下节点:
然后针对只有一个子节点的xml节点进行单独出路,均增加json:Array="true"属性即可,代码如下:xmlns:json='http://james.newtonking.com/projects/json'
<ControlItem xmlns:json='http://james.newtonking.com/projects/json' > <item json:Array="true" visible="" name="altRowTemplate" cname="行交替模板" viewType="textArea"/> </ControlItem>