• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Json字符串、Xml字符串转C#实体类Class

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 在项目开发过程中,经常需要和不同部门或者不同的组员一起协同工作,但对方写的返回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>
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <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>
View Code

 

代码很简单,我想你一定会,注意里面引用了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 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# 系统托盘图标发布时间:2022-07-14
下一篇:
C# 用鼠标框选屏幕一个范围进行录屏发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap