在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在项目开发过程中,经常需要和不同部门或者不同的组员一起协同工作,但对方写的返回json格式的结果集,我们需要用这些数据,那么如何来生成对应的类代码和实体对象呢? 对于是使用Swagger框架的,网上都有现成的生成工具,这里就不说了。 对于原生的json字符串或xml字符串呢?于是参考了网上的做法,一个偶然的机会,在一个网站上看到的,可以把json字符串,转成C#对应的实体类,参考:http://www.bejson.com/convert/json2csharp/ 根据网上的,自己稍微修改了一点,使用Html做一个简单的字符串转实体类的功能,仅仅实现基本的,可以直接把Json字符串转成C#对应的实体类,更符合自己的使用,记录如下: 其中使用了jquery-2.2.0.min.js,我这里就不贴了,自己到网上去下载一个。 这里是Html的代码:保存到JsonXmlToClass.html文件中: <!DOCTYPE html> <html> <head> <title>JSON字符串转C#实体类</title> </head> <body> <div class="panel panel-default"> <div class="panel-heading"> <div class="media"> <div class="media-body"> <h4 class="media-heading">JSON字符串转C#实体类</h4> </div> </div> </div> <div class="panel-body"> <!--内容块开始--> <p style="margin-top: 20px;"> 命名空间:<input type="text" id=txtNameSpace /><br /> <textarea id="json" class="form-control" style="height: 200px; width:800px;"></textarea> </p> <p> <button type="submit" class="btn btn-primary btn-sm" onclick="return testJsonCase();">来个json试试</button> <button type="submit" data-toggle="modal" data-target="#myModal" class="btn btn-primary btn-sm" onclick="genJson();">Json生成实体类</button> <button type="button" class="btn btn-danger btn-sm" onclick="$('#json').val(''),$('#resData').val('')">清空</button> <button type="button" class="btn btn-danger btn-sm" onclick="genJsonTest('#json')">testJson</button> <button type="submit" class="btn btn-primary btn-sm" onclick="return testXmlCase();">来个xml试试</button> <button type="submit" data-toggle="modal" data-target="#myModal" class="btn btn-primary btn-sm" onclick="genXml();">Xml生成实体类</button> <button type="button" class="btn btn-danger btn-sm" onclick="$('#json').val(''),$('#resData').val('')">清空</button> </p> <p style="margin-top: 20px;"><textarea id="resData" class="form-control" style="height: 300px; width:800px;"></textarea></p> <!-- Modal --> <!--内容块结束--> </div> <div class="panel-footer"></div> </div> <hr /> <input id="btnTest" onclick="t1(22)" type="button" value="测试运行时代码" /> <br /> <textarea title="js" style="height: 60px; width:800px;"> function t1(v){ console.log(new Date().getSeconds() + "----------执行日志-----------" + v); } </textarea> <hr /> </body> </html> <!--script src="jquery-1.10.2.js"></script--> <script src="jquery-2.2.0.min.js"></script> <script src="jsontocsharp.js"></script> <script src="XmlTocsharp.js"></script> <script> //document.title = Math.random(); //$(function(){console.log("init "+new Date().getSeconds());}); $(function () { console.log("init start " + new Date().getSeconds()); $('textarea[title]').each(function () { //return (new Function("return "+""+($(this).text()+""))(); window.eval(' ' + $(this).text() + ' '); }); console.log("init end " + new Date().getSeconds()); }); </script> <script> function genJsonTest(obj) { alert($(obj).val()); } function genJson() { $("#resData").html(''); if ($("#json").val().trim() == "") { $("#resData").text("请填写JSON"); return false; } try { var v = eval("(" + document.getElementById("json").value + ")"); } catch (e) { $("#resData").html('Json字符串转换失败!\r\n请检查字符串是否为标准json格式。'); return false; } JSON2CSharp.NamespaceConfig = { IsGenNamespace: false, Namespace: document.getElementById("txtNameSpace").value }; //JSON2CSharp.NamespaceConfig.IsGenNamespace = false; var res = JSON2CSharp.convert(v); $("#resData").val($("<div/>").html(res).text()); }; // 加载xml文档 function loadXmlFile(xmlFile) { var xmlDoc = null; if (window.ActiveXObject) { xmlDoc = new ActiveXObject('Microsoft.XMLDOM'); xmlDoc.async = false; xmlDoc.load(xmlFile); } else if (document.implementation && document.implementation.createDocument) { xmlDoc = document.implementation.createDocument('', 'doc', null); xmlDoc.async = false; xmlDoc.preserveWhiteSpace = true; xmlDoc.load(xmlFile); } else if (window.XMLHttpRequest) {//支持出网络获取 var xmlhttp = new window.XMLHttpRequest(); xmlhttp.open("GET", "#", false); xmlhttp.send(null); xmlDoc = xmlhttp.responseXML.documentElement; } return xmlDoc; } //加载xml字符串 function loadXmlStr(xmlStr) { var xmlDoc = null; if (window.DOMParser) { //非IE浏览器 xmlDoc = (new DOMParser()).parseFromString(xmlStr, "text/xml"); } else { //IE浏览器 xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); // 或者:xmlDoc = new ActiveXObject("MSXML2.DOMDocument"); xmlDoc.async = "false"; //不启用异步,保证加载文件成功之前不会进行下面操作 xmlDoc.loadXML(xmlStr); } return xmlDoc; } function genXml() { $("#resData").html(''); if ($("#json").val().trim() == "") { $("#resData").text("请填写Xml"); return false; } try { var d = loadXmlStr(document.getElementById("json").value); if (d == null) { $("#resData").html('loadXml字符串转换失败!\r\n请检查字符串是否为标准xml格式。'); return false; } } catch (e) { $("#resData").html('loadXml字符串转换失败!\r\n请检查字符串是否为标准xml格式。\r\n' + e.message); return false; } Xml2CSharp.NamespaceConfig = { IsGenNamespace: false, Namespace: document.getElementById("txtNameSpace").value }; //JSON2CSharp.NamespaceConfig.IsGenNamespace = false; var res = Xml2CSharp.convert(d); $("#resData").val($("<div/>").html(res).text()); } function testJsonCase() { $("#json").val('{\r\n\t"animals":{\r\n\t"dog":[\r\n\t\t{"name":"Rufus","breed":"labrador","count":1,"twoFeet":false},\r\n\t\t{"name":"Marty","breed":"whippet","count":1,"twoFeet":false}\r\n\t],\r\n\t"cat":{"name":"Matilda"}\r\n}\r\n}'); } function testXmlCase() { var xml = ""; xml += "<?xml version='1.0' encoding='utf-16'?>\r\n"; xml += "<testRoot xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>\r\n"; xml += " <dataHead id='1'>\r\n"; xml += " <jkid>23270000</jkid>\r\n"; //xml += " <jkname>BD11F82096F0290DB2866BD266A0CEDF</jkname>\r\n"; xml += " </dataHead>\r\n"; xml += " <dataBody id='2'>\r\n"; xml += " <vehispara xsi:type='JCZ01'>\r\n"; xml += " <tsno>23270002</tsno>\r\n"; //xml += " <orgcode>23270002</orgcode>\r\n"; xml += " <station>XXXX有限公司</station>\r\n"; xml += " <linkdate>2038-08-11T00:00:00</linkdate>\r\n"; xml += " <testAdd />\r\n"; xml += " <status>1</status>\r\n"; xml += " <lng xsi:nil='true' />\r\n"; xml += " </vehispara>\r\n"; xml += " </dataBody>\r\n"; xml += "</testRoot>\r\n"; $("#json").val(xml); } </script>
代码很简单,我想你一定会,注意里面引用了jQuery文件;另外jsontocsharp.js文件如下 这个是JsonTocsharp.js文件,在生成的代码时也可以生成命名空间的代码,并且可配置的哦!内容如下: String.prototype.format = function () { var args = arguments; return this.replace(/\{(\d+)\}/g, function (m, i) { return args[i]; }); } String.prototype.trim = function () { return this.replace(/(^\s*)|(\s*$)/g, ""); } JSON2CSharp = { _allClass: [], NamespaceConfig: { IsGenNamespace: true, Namespace: "JsonNamespace.TestWeb" }, _genClassCode: function (obj, name) { var clas = this._genComment(name || "RootObj", obj).replace(/\t/g, ""); clas += "public partial class {0}\r\n{\r\n".format(name || "RootObj"); for (var n in obj) { var v = obj[n]; n = n.trim(); n = n.substring(0, 1).toUpperCase() + n.substring(1); if (n.length > 0) clas += "{0}\tpublic {1} {2} { get; set; }\r\n\r\n".format(this._genComment(n, v), this._genTypeByProp(n, v), n); } clas |
请发表评论