使用JsonConvert.SerializeXmlNode时需注意的问题

在项目中遇到了几个的关于XML与JSON互相转化的小问题,特总结如下:

  1. 解析出来的JSON字符串全都带@符号

    先贴一段代码,如下为xml文件转JSON字符串的代码:

     
    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文件后,所有JSON节点前均带有@符号,只有一种情况会出现这种情况,即XML文件的格式为如下格式时才会出现:示例代码如下:

     
    <item name="display" cname="是否可见" viewType="select" summary="" defaultValue="block" currentValue="block" />
     这样的XML文件使用如上转JSON的方法序列化之后,所有属性均带有@符号,如果XML定义的格式如下,则不会出现@符号,示例代码如下:

     
    <name>张三</name>
    至今无法找到解决方案,希望大神看到之后,能给出解决方案,我采用了一种极端的处理方式,即使用正则表达式替换,自我感觉这种方式欠妥,代码如下:
     
    string jsonText = Regex.Replace(JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None), "(?<=\")(@)(?!.*\":\\s )", string.Empty, RegexOptions.IgnoreCase);
  2. 关于XML父亲节点下只有一个子节点,采用如上方法进行JSON序列化后,XML子节点并未被序列化为数组,而是一个对象
    在网上百度之后,看到大神的解决方案,即在XML文件的头部增加如下节点:

     
    xmlns:json='http://james.newtonking.com/projects/json'
    然后针对只有一个子节点的xml节点进行单独出路,均增加json:Array="true"属性即可,代码如下:
     
    <ControlItem xmlns:json='http://james.newtonking.com/projects/json' >
        <item json:Array="true" visible="" name="altRowTemplate" cname="行交替模板" viewType="textArea"/>
    </ControlItem>
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值