JSON是各种编程语言中都很常用的数据格式,如Java,JavaScript,C#等语言中都常用JSON传输数据或保存一些配置信息,要序列化或反序列化字符串,在代码中需要有对应与JSON内容的类才方便实现。vscode是非常强大的插件化编辑(甚至可以称之为开发环境了),在vscode中,通过两个插件可以非常方便的根据写好的JSON数据内容,自动生成对应的序列化的类。
安装插件
在vscode Extensions管理中搜索“JSON”关键字,先安装JSON支持插件“JSON”,如下图:
然后,安装“Paste JSON as Code”插件,如下图:
该插件支持由JSON生成TypeScript, Python, Go, Ruby, C#, Java, Swift, Rust, Kotlin, C++, Flow, Objective-C, JavaScript, Elm 和 JSON Schema语言的代码。
JSON生成C#的代码
这里以转换为C#的代码为例,假设JSON的文本内容如下:
{
"user": "Jame",
"ege" : "19"
}
拷贝JSON内容到剪贴板,然后使用“F1”快捷键,搜索“Paste JSON as Code”,如下图:
直接单击“Paste JSON as Code”,此时,会提示代码文件的文件名,此处输入"test.cs",然后回车,插件就会自动将剪贴板中的JSON转换为序列化/反序列化的C#代码,转换后的代码如下:
// Generated by https://quicktype.io
namespace QuickType
{
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class TestCs
{
[JsonProperty("user")]
public string User { get; set; }
[JsonProperty("ege")]
[JsonConverter(typeof(ParseStringConverter))]
public long Ege { get; set; }
}
public partial class TestCs
{
public static TestCs FromJson(string json) => JsonConvert.DeserializeObject<TestCs>(json, QuickType.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this TestCs self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters = {
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
internal class ParseStringConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
var value = serializer.Deserialize<string>(reader);
long l;
if (Int64.TryParse(value, out l))
{
return l;
}
throw new Exception("Cannot unmarshal type long");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
if (untypedValue == null)
{
serializer.Serialize(writer, null);
return;
}
var value = (long)untypedValue;
serializer.Serialize(writer, value.ToString());
return;
}
public static readonly ParseStringConverter Singleton = new ParseStringConverter();
}
}
以上代码,自动使用了NewtonJSON库进行序列化和反序列化操作,在实际工程中需要引入NewtonJson才能正常使用。生成的代码也是一个很简洁并高效的代码模板,自动生成了静态方法,直接使用对象名.Serialize()就可以直接将对象进行序列化操作。
评论区