C# json生成类

这篇具有很好参考价值的文章主要介绍了C# json生成类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  在C#中使用Newtonsoft.Json解析JSON,首先需要安装Newtonsoft.Json NuGet包。可以通过以下步骤进行安装:
  (1) 打开Visual Studio项目。
  (2) 在“解决方案资源管理器”中,右键单击项目,然后选择“管理NuGet程序包”。在NuGet包管理器中,搜索“Newtonsoft.Json”。找到Newtonsoft.Json包,点击安装按钮。
  如下图
C# json生成类

  安装完成后,就可以在C#代码中使用Newtonsoft.Json来解析JSON了。

简单json解析

  例如下面的json字符串:

{
    "name":"jack",
    "age":30,
    "city":"New York"
}

  C# 解析代码

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // JSON字符串
            string json = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";

            // 解析JSON
            var obj = JsonConvert.DeserializeObject<JObject>(json);

            // 获取属性值
            string name = obj["name"].ToString();
            int age = Convert.ToInt32(obj["age"]);
            string city = obj["city"].ToString();

            // 输出结果
            Console.WriteLine($"Name: {name}");
            Console.WriteLine($"Age: {age}");
            Console.WriteLine($"City: {city}");
        }
    }
}

  在上面的示例中,先引入了Newtonsoft.Json的名字空间

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

  然后使用JsonConvert.DeserializeObject方法传入泛型JObject将JSON字符串解析为一个动态对象, 通过访问动态对象的属性,可以获取JSON中的值。

复杂json解析

  对于简单的json的可以直接解析, 复杂的json, 建议用先创建json对应的类,然后再用JsonConvert.DeserializeObject转为类来解析, 当json比较复杂时, 创建类也比较浪费时间, VS2022为C#提供了json转C#类的工具,先复制需要转为类的json字符串,然后将光标定位到cs文件的空白处,最后点击编辑–选择性粘贴–将Json粘贴为类,如下图:
C# json生成类
此时即可生成对应的json类,例如下面这个json串:

{
    "statusCode": 200,
    "headers": {
        "Content-Type": "application/json"
    },
    "body": {
        "message": "Success",
        "data": {}
    }
}

自动生成的C#类:

public class Rootobject
{
    public int statusCode { get; set; }
    public Headers headers { get; set; }
    public Body body { get; set; }
}

public class Headers
{
    public string ContentType { get; set; }
}

public class Body
{
    public string message { get; set; }
    public Data data { get; set; }
}

public class Data
{
}

除了VS自带的工具,也有一些网站提供了类似的功能,例如Json2CSharp。

当然网上也有已经实现的json转C#类的html工具,下面提供一个自动生成C# json类的工具, html如下:

<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#类代码&nbsp;<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&#60;{0}&#62;".format(this._genTypeByProp(name+"Item",val[0]));
					}
					default:{
						return "string";
					}
				}	
			},
			_genComment:function(val){
				var commm= typeof(val) == "string" && /.*[\u4e00-\u9fa5]+.*$/.test(val) ? val : "" ;
				return "/// &#60;summary&#62;\r\n    /// "+commm+ "\r\n    /// &#60;/summary&#62;\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>

  打开该html, 如下所示:
C# json生成类

复制json字符串, 然后生成json类, 例如要解析的json如下:

{
    "name": "John",
    "age": 30,
    "address": {
        "city": "New York",
        "country": "USA"
    },
    "hobbies": ["reading", "traveling", "sports"]
}

自动生成的json类如下:

public class Address
{
    /// <summary>
    /// 
    /// </summary>
    public string city { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public string country { get; set; }

}



public class Root
{
    /// <summary>
    /// 
    /// </summary>
    public string name { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public int age { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public Address address { get; set; }

    /// <summary>
    /// 
    /// </summary>
    public List<string> hobbies { get; set; }
}

  生成的类数据类型可能和json的不一致, 需要手动检查, 修改, 防止json解析时出错,生成的Json类名是Root, 可以自己修改为想要的类名。

  此时的json解析方法如下:

// 解析JSON
var person = JsonConvert.DeserializeObject<CStudentInfo>(json);

// 获取属性值
string name = person.name;
int age = person.age;
Address address = person.address;
List<string> hobbies = person.hobbies;

生成json字符串

  在进行http请求时, 经常需要传json参数, 对于简单的json字符串, 可以使用string反斜杠来表示, 但是如果json比较复杂或者需要传入参数, 那么将比较复杂,。Newtonsoft.Json也可以生成json字符串. 可以先将要生成的json字符串模板复制到上面的html页面,生成C#类, 例如生成的的json类如下:

internal class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string City { get; set; }
}

  在Main函数中创建Person对象, 然后将其转为json字符串, 代码如下:

static void Main(string[] args)
{
    // 创建一个Person对象
    var person = new Person();
    person.Name = "John";
    person.Age = 30;
    person.City = "New York";
    
    // 将Person对象转换为JSON字符串
    string json = JsonConvert.SerializeObject(person);

    // 输出结果
    Console.WriteLine(json);
}

  对于复杂json, 使用类序列化将是很方便的方法。
对于以上方法,建议使用VS自带的json转C#类工具,转成之后,检查数据类型是否正确,防止在json解析时crash。文章来源地址https://www.toymoban.com/news/detail-481649.html

到了这里,关于C# json生成类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CYQ.Data 操作 Json 性能测试:对比 Newtonsoft.Json

    在 CYQ.Data 版本更新的这么多年,中间过程的版本都在完善各种功能。 基于需要支持或兼容的代码越多,很多时候,常规思维,都把相关功能完成,就结束了。 实现过程中,无法避免的会用到大量的反射、锁等对性能有所影响的逻辑代码。 CYQ.Data 从V5.9 版本开始,开始大规

    2024年03月18日
    浏览(54)
  • Newtonsoft.Json/Json.NET忽略序列化时的意外错误

    在.NET中Newtonsoft.Json(Json.NET)是我们常用来进行Json序列化与反序列化的库。 而在使用中常会遇到反序列化Json时,遇到不规则的Json数据解构而抛出异常。 Newtonsoft.Json 支持序列化和反序列化过程中的错误处理。 允许您捕获错误并选择是处理它并继续序列化,还是让错误冒泡并抛

    2024年03月21日
    浏览(47)
  • 在unity中添加Newtonsoft.Json

    在Packages-packages-lock.json中修改com.unity.collab-proxy为     \\\"com.unity.collab-proxy\\\": {       \\\"version\\\": \\\"1.5.7\\\",       \\\"depth\\\": 0,       \\\"source\\\": \\\"registry\\\",       \\\"dependencies\\\": {         \\\"com.unity.nuget.newtonsoft-json\\\": \\\"2.0.0\\\"       },       \\\"url\\\": \\\"https://packages.unity.cn\\\"     },   在Packages-manifest.json中修改

    2024年02月13日
    浏览(67)
  • 怎么在unity 3D中引入Newtonsoft.Json库

    打开 Unity 编辑器。 转到菜单栏的 \\\"Window\\\"(窗口)选项,然后选择 \\\"Package Manager\\\"(包管理器)。 在 Package Manager 窗口中,选择 \\\"All\\\"(全部)选项卡。 在搜索框中输入 \\\"Json.NET\\\" 或 \\\"Newtonsoft.Json\\\" 进行搜索。                                          (注意要选择Unity Registry)

    2024年02月04日
    浏览(41)
  • C# json生成类

      在C#中使用Newtonsoft.Json解析JSON,首先需要安装Newtonsoft.Json NuGet包。可以通过以下步骤进行安装:   (1) 打开Visual Studio项目。   (2) 在“解决方案资源管理器”中,右键单击项目,然后选择“管理NuGet程序包”。在NuGet包管理器中,搜索“Newtonsoft.Json”。找到Newtonsoft.J

    2024年02月08日
    浏览(28)
  • 怎么在unity3D工程中导入Newtonsoft.Json

    打开 Unity 编辑器。 转到菜单栏的 “Window”(窗口)选项,然后选择 “Package Manager”(包管理器) 在搜索框中输入 “Newtonsoft Json” 进行搜索。 注意:要选择Unity Registry 在搜索结果中,会看到 “Newtonsoft Json” 类似名称的项目。 单击搜索结果下方的 “Install”(安装)按钮。

    2024年02月02日
    浏览(56)
  • Elasticsearch系列(八)----ES生成JSON与解析JSON的方式

    一、生成JSON 四种方式如下,官网文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-index.html: **1.1手写方式生成 ** **1.2使用集合 ** 集合是key:value数据类型,可以代表json结构. **1.3使用JACKSON序列化 ** ElasticSearch已经使用了jackson,可以直接使用它把javabean转为json.

    2024年02月11日
    浏览(33)
  • 【Unity】C# 创建/读取/解析JSON数据

    判断是否存在JSON数据文件没有则创建并保存

    2024年02月16日
    浏览(68)
  • C#请求访问HTTP+JSON数据的解析

    最近工作客户需要一个HTTP的Mes需求,所以自己去学习了C#请求HTTP的方法以及JSON数据的解析方法,总结出了点经验,以便后续自己找起来方便一点,故在此写一篇文章。 下面我用一个聚合数据提供的天气预报API接口来阐述请求HTTP和JSON数据解析的功能; 先看API文档这么访问数

    2024年02月12日
    浏览(42)
  • mORMot2 生成和解析 JSON

    本文非完全原创,本文部分内容来自博客园,作者:{咏南中间件} 前综合示例 ,整个示例是建立在mORMot特有的实现模式的基础上,非常用的序列化反序列化,但又有别于字符串拼接,据说效率极高。 基础 下面是最基本的方法,如何定位!这里用到了 GetValueByPath 函数。 进阶

    2024年04月25日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包