`
jammk
  • 浏览: 40414 次
文章分类
社区版块
存档分类
最新评论

JSON生成c#类代码小工具

阅读更多

最近的项目中需要和一个服务端程序通讯,而通讯的协议是基于流行的json,由于是.net,所以很简单的从公司代码库里找到了Newtonsoft.dll(json.NET),但是悲剧的是这个dll居然是很老的版本,没有Newtonsoft.Json.Linq、没有JObject,也就是说,如果想使用json必须json字符序列化为.net对象才行,这时问题来了,json格式无比的复杂,如果我一个一个对着json去定义class代码,实在是显得有点蠢了,所以百度了一下,还真找到了一个工具http://json2csharp.chahuo.com/,但是这个工具对我来说有一点点不爽,我的json中属性的值,我希望将它生成为.net中属性的注释如:如

{  
   name:"用户名",password:"密码"  
}  

 生成

public class Root  
{  
  
    /// <summary>  
    /// 用户名  
    /// <summary>  
    public string name { get; set; }  
  
    /// <summary>  
    /// 密码  
    ///</summary>  
    public string password { get; set; }  
  
}  

 而该工具貌似不可以,于是使用js写了简单的小工具,(测试数据json来自于:https://www.juhe.cn/docs/api/id/39(不是广告,我随便找的))如下:

 

如下:

<iframe style="margin: 0px; padding: 0px; color: #393939; font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, sans-serif; width: 756.859px; height: 800px;" src="http://sandbox.runjs.cn/show/nhuozgst"></iframe>

 

代码

<html>  
<head>  
<title>json生成c#类</title>  
<link rel="stylesheet" href="http://js.chahuo.com/prettify/prettify.css">  
<script language="javascript" type="text/javascript" src="http://js.chahuo.com/prettify/prettify.js"></script>  
<script type="text/javascript" src="http://tool.oschina.net/js/jsbeautify.js"></script>  
</head>  
<body>  
      
    <h1>json生成C#类小工具</h1>  
    <h5>JSON 字符串</h5>  
    <div>  
        <textarea style="width:600px;height:300px;margin-bottom:5px;" id="jsonStr"></textarea>  
        <br>  
        <button onclick="document.getElementById('jsonStr').value='';document.getElementById('class').innerHTML=''">清除</button>  
        <button onclick="do_js_beautify()">格式化代码</button>  
        <button onclick="startGen()">生成C#类</button>  
    </div>  
  
    <h5>C#类代码 <button onclick="selectCode()">选中代码</button></h5>  
      
    <pre class="prettyprint" id="class" style="border:1px solid #ccc; padding:10px; width:800px;">   
              
    </pre>  
      
    <script>  
      
        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:[],  
            _genClassCode:function(obj,name){  
                var clas="public class {0}\r\n{\r\n".format(name || "Root");  
                for(var n in obj){  
                    var v = obj[n];  
                    n = n.trim();  
                    clas += "    {0}    public {1} {2} { get; set; }\r\n\r\n".format(this._genComment(v),this._genTypeByProp(n,v),n);  
                }  
                clas += "}\r\n\r\n";  
                this._allClass.push(clas);  
                return this._allClass.join("\r\n\r\n");  
            },  
            _genTypeByProp:function(name,val){  
                switch(Object.prototype.toString.apply(val)){  
                    case "[object Number]" :{  
                        return val.toString().indexOf(".") > -1 ? "double" : "int";  
                    }  
                    case "[object Date]":{  
                        return "DateTime";  
                    }  
                    case "[object Object]":{  
                                                name =  name.substring(0,1).toUpperCase() + name.substring(1);  
                        this._genClassCode(val,name);  
                        return name;  
                    }  
                    case "[object Array]":{  
                        return "List<{0}>".format(this._genTypeByProp(name+"Item",val[0]));  
                    }  
                    default:{  
                        return "string";  
                    }  
                }     
            },  
            _genComment:function(val){  
                var commm= typeof(val) == "string" && /.*[\u4e00-\u9fa5]+.*$/.test(val) ? val : "" ;  
                return "/// <summary>\r\n    /// "+commm+ "\r\n    /// </summary>\r\n";  
            },  
            convert:function(jsonObj){  
                this._allClass=[];  
                return this._genClassCode(jsonObj);  
            }  
        }  
          
          
          
        function do_js_beautify() {  
            var js_source =document.getElementById("jsonStr").value.replace(/^\s+/, '');  
            if(js_source.length==0)  
                return;  
            tabchar = ' ';  
            var fjs = js_beautify(js_source);  
            document.getElementById("jsonStr").value=fjs;  
        }  
  
          
        function startGen(){  
            try{  
                var v = eval("("+document.getElementById("jsonStr").value+")");  
                document.getElementById("class").className ="prettyprint";  
                document.getElementById("class").innerHTML=JSON2CSharp.convert(v);  
                prettyPrint();    
                document.getElementById("jsonStr").focus();  
            }catch(e){  
                alert(e.message);  
            }  
        }  
          
        function selectCode() {  
            if (document.selection) {  
                var range = document.body.createTextRange();  
                range.moveToElementText(document.getElementById('class'));  
                range.select();  
            } else if (window.getSelection) {  
                var range = document.createRange();  
                range.selectNode(document.getElementById('class'));  
                window.getSelection().addRange(range);  
            }  
        }  
    </script>  
</body>  
</html>  

 原理非常简单,遍历json对象的属性,根据属性值的类型生成对应的类名即可, 这里不做详细介绍了。 代码写的有点丑,希望大家用得着。

 

分享到:
评论

相关推荐

    C# JSON实体类生成工具

    该工具支持通过在软件界面输入或者粘贴JSON字符串,根据字符串生成C#编程开发使用的JSON实体类文件。

    dotnet-一个用于解析swaggerjson生成符合WebApiClient接口代码的代码生成工具

    一个用于解析swagger.json生成符合WebApiClient接口代码的代码生成工具

    JSONToCSHarp

    JSON生成c#类代码小工具,网上整理的,可以离线使用,里边有两个html文件,一个用的是在线的资源,一个用离线的资源。

    excel生成json工具

    把excel表格生成json文件的工具 非常方便 详细使用方法见readme.txt readme.txt包含使用例子 包含源代码地址

    c#_Json数据转为相应字段的类

    将标准的json数据式转换为相应的类,方便开发者们避免看着烦乱的json数据而去建具有相同字段的类,这款工具可以根据json自动生成类 有两种方式可以进行生成,根据rul地址从服务器获取json代码,或者直接通过json...

    c#json解析工具+西门子协议

    json解析工具包括:校验,转义,去转义,格式化,json生成实体类等功能。后期会将这个小demo更加的完善。感兴趣可以关注一下,或加qq1010969714.(现在没加远程更新代码,所以只会暂时按版本发布)

    SmartSoftHelp最专业的SqlServer优化工具,最专业的c#代码生成器

    5.C#前端后端代码自动生成(netframework ,netcore) 6.服务器安全(端口号扫描,文件权限,防火墙,服务) 7.web应用程序5级缓存优化 8.程序版权著作保护(图片,程序,软件应用,公司版权保护,著作权,开发作者...

    Json字符串生成工具.zip

    C#开发,含源码,可根据实际需要而改动代码,编译成自己定制的工具。工具代替人,效率会提高很多,且工具在于反复使用,用得越多,创造的价值越多,需要的请拿去!

    sql数据表生成Model(实体层)代码和组合JSON字符串

    这个是我在工作的时候需要使用的工具,大大减轻了工作量,拿出来共享一下。此为C#开发,所以需要安装.Net版本为2.0或者以上。希望对你有帮助。

    CodeGenerator_x64.rar

    CodeGenerator.exe是一款net4.5 wpf工具,运行此工具前必须安装net4.5,且此工具以来Access2007数据库驱动,代码生成器支持SQLServer、... PostMan功能可简单请求接口并生成C#请求代码,帮助类可在“帮助类”文件夹中获取

    json-c-0.7.rar_c json_json c_json 数据 格式_json-c vc_xml-json-c

     XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。  ◆解码难度  XML的解析得考虑子...

    c#搜集的帮助类 c#搜集的帮助类

    方法:四种Sandcastle方法生成c#.net帮助类帮助文档,地址:http://www.cnblogs.com/anyushengcms/p/7682501.html ![H819EQUYFVA~WXK6YAQ1%6Q.png]...

    C#基类库大全下载--苏飞版

    2.Api_Win32_Mac类工具包 一个Win32的Api包,实现了大部分的Api操作帮助方法 3.在c#程序中放音乐的帮助类 使用C#播放音乐的帮助类,只需要调用方法就可以放音乐了 GDI+相关,图像相关1.生成缩略图的类文件Small...

    Json:更轻松,更快的Json序列化工具

    #KoobooJson-更小刷新的C#JSON序列化工具(基于表达式树生成)为什么需要KoobooJson? KoobooJson是一款体积小巧没有任何依赖且性能表现强劲的Json工具。当您需要一个体积较小,性能强大的Json序列化工具时,当您...

    C#基类库(苏飞版)

    2.Api_Win32_Mac类工具包 一个Win32的Api包,实现了大部分的Api操作帮助方法 3.在c#程序中放音乐的帮助类 使用C#播放音乐的帮助类,只需要调用方法就可以放音乐了 GDI+相关,图像相关 1.生成缩略图的类文件Small...

    netdoc:NetDoc是用于从C#代码创建简单API文档的工具

    网络文件NetDoc是用于从C#代码创建简单API文档的工具。安装该项目使用Node.js作为命令行界面。 请注意,您需要使用0.10。*或更高版本的Node.js。 要安装,请使用npm。 npm install ...

    RefitGenerator:根据OpenApi定义生成Refit客户端代码的工具

    RefitGenerator是一个全球性dotnet tool用来生成从OpenAPI的架构客户端代码。 用法 输入regen -h将显示参数列表: -u或--url -OpenApi json或yaml的URL -f或--file -OpenApi json或yaml本地文件的路径 -o或--...

    【VS2019插件】CodeMaid

    一个开源的Visual Studio扩展,用于清理和简化C#,C++,F#,VB,PHP,PowerShell,R,JSON,XAML,XML,ASP,HTML,CSS,LESS,SCSS,JavaScript和TypeScript编码 主要包含四大功能: 1.代码清理 将随机空格清理为...

    api-client-generator:来自Swagger YAML或驼峰大小写settigs的JSON文件的Angular REST API客户端生成器

    API客户端生成器来自Swagger YAML或JSON文件的驼峰REST API客户端生成器,带有驼峰式案例设置描述该软件包从Swagger v2.0规范文件生成Angular TypeScript类。 该代码是通过组合把手模板和代码内模板字符串生成的。 ...

Global site tag (gtag.js) - Google Analytics