x2js,用javascript可以实现,https://code.google.com/p/x2js/

解决方案 »

  1.   

    问题不是那中方式的问题,问题是你属性字段太操蛋了,偏偏是个type,换成任何一个都行,就type不行。看源码for( int i = 0; i < attrCount; i++ ){  
       Attribute attr = element.getAttribute( i );  
       String attrname = attr.getQualifiedName();  
       if( isTypeHintsEnabled()  
             && (addJsonPrefix( "class" ).compareToIgnoreCase( attrname ) == 0 || addJsonPrefix(  
                   "type" ).compareToIgnoreCase( attrname ) == 0) ){  
          continue;  
       }  
       String attrvalue = attr.getValue();  
       setOrAccumulate( jsonObject, "@" + removeNamespacePrefix( attrname ),  
             trimSpaceFromValue( attrvalue ) );  
    }  遇到属性是type的直接跳过了,否则才加@符号的,不信你换任何一个字符串看看。我记得以前回复过类似的问题。
      

  2.   

    同意楼上的说法,type 直接跳过。
      

  3.   

    确实是太操蛋,可以用户的XML有很多属性名就是xsi:type,总不能叫人家不要用这样的属性名吧?有什么好的办法可以解决这个问题呢?
      

  4.   

    确实是太操蛋,可以用户的XML有很多属性名就是xsi:type,总不能叫人家不要用这样的属性名吧?有什么好的办法可以解决这个问题呢?
    不会是去更改源码吧?
      

  5.   

    XMLSerializer xmlSerializer = new XMLSerializer();
    String xml = "<root><name type='type'>zhaipuhong</name><gender>male</gender><birthday><year>1970</year><month>12</month><day>17</day></birthday></root>";
    xmlSerializer.setTypeHintsCompatibility(false);
    xmlSerializer.setTypeHintsEnabled(false);
    JSON json = xmlSerializer.read(xml);
    System.out.println(json);这样设置下吧。
      

  6.   

    嗯,但是这样type是可以了,xsi:type还是不行
      

  7.   

    因为你传的是XML字符串,我觉得可以在遇到xsi:type的时候做一个转换,比如转成xsi_type什么的,然后再把转出来的JSON再做一次转换xsi:type—>xsi:type,这样应该可以得到你想要的
      

  8.   

    http://blog.csdn.net/withiter/article/details/17680623
      

  9.   


    谢谢大家,问题解决,最终还是用1#的办法,用x2js在前台转换,遇到“:”就用随机字符串替代。当然,2#的方法也相当不错,只是在java中正则表达式还不是很熟悉,所以在前台js里面转了,再次谢谢大家!