visual studio使用技巧:快速生成Json、XML对应类

visual studio快速生成Json、XML对应类

在项目中经常用到json或者xml作为配置文件,进行序列化和反序列化就需要有对应的类,重新写一遍类就比较麻烦,这里就讲一下通过visual studio快速生成json或者xml对应类型的方法。

自动生成Json类

复制一个json文件,自动在visual studio中生成

复制Json文件

json 复制代码
{
  "DeviceLinks": [
    {
      "UID": "device01",
      "Ip": "127.0.0.1",
      "Port": 502,
      "SlaveId": 1,
      "AcqTimeSpan": 1
    },
    {
      "UID": "device02",
      "Ip": "127.0.0.1",
      "Port": 503,
      "SlaveId": 1,
      "AcqTimeSpan": 1
    }
  ],
  "MqttConfig": {
    "Ip": "127.0.0.1",
    "Port": 1883,
    "Username": "admin",
    "Password": "12345"
  },
  "ServiceConfig": {
    "PushTimeSpan": 5,
    "IsPushScheduled": true,
    "IsPushChanged": true
  }
}

切换到一个cs的类文件

必须在c#的cs文件中,才能看到编辑中对应的菜单

选择性粘贴

在菜单栏,"编辑"→"选择性粘贴"→将JSON粘贴为类

代码自动生成,会生成一个Rootobject为json的主类,子类也会一起生成,这里根据json字段定义,自动生成对应的子类

csharp 复制代码
public class Rootobject
{
    public Devicelink[] DeviceLinks { get; set; }
    public Mqttconfig MqttConfig { get; set; }
    public Serviceconfig ServiceConfig { get; set; }
}

public class Mqttconfig
{
    public string Ip { get; set; }
    public int Port { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
}

public class Serviceconfig
{
    public int PushTimeSpan { get; set; }
    public bool IsPushScheduled { get; set; }
    public bool IsPushChanged { get; set; }
}

public class Devicelink
{
    public string UID { get; set; }
    public string Ip { get; set; }
    public int Port { get; set; }
    public int SlaveId { get; set; }
    public int AcqTimeSpan { get; set; }
}

注意:转换大小写,会跟随json文件,需要自己调整一下

自动生成XML类

步骤一样,选择性粘贴中选择"将XML粘贴为类"

示例XML:

xml 复制代码
<Configuration>
  <DeviceLinks>
    <DeviceLink>
      <UID>device01</UID>
      <Ip>127.0.0.1</Ip>
      <Port>502</Port>
      <SlaveId>1</SlaveId>
      <AcqTimeSpan>1</AcqTimeSpan>
    </DeviceLink>
    <DeviceLink>
      <UID>device02</UID>
      <Ip>127.0.0.1</Ip>
      <Port>503</Port>
      <SlaveId>1</SlaveId>
      <AcqTimeSpan>1</AcqTimeSpan>
    </DeviceLink>
  </DeviceLinks>
  
  <MqttConfig>
    <Ip>127.0.0.1</Ip>
    <Port>1883</Port>
    <Username>admin</Username>
    <Password>12345</Password>
  </MqttConfig>
  
  <ServiceConfig>
    <PushTimeSpan>5</PushTimeSpan>
    <IsPushScheduled>true</IsPushScheduled>
    <IsPushChanged>true</IsPushChanged>
  </ServiceConfig>
</Configuration>

生成结果

csharp 复制代码
// 注意: 生成的代码可能至少需要 .NET Framework 4.5 或 .NET Core/Standard 2.0。
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class Configuration
{

    private ConfigurationDeviceLink[] deviceLinksField;

    private ConfigurationMqttConfig mqttConfigField;

    private ConfigurationServiceConfig serviceConfigField;

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayItemAttribute("DeviceLink", IsNullable = false)]
    public ConfigurationDeviceLink[] DeviceLinks
    {
        get
        {
            return this.deviceLinksField;
        }
        set
        {
            this.deviceLinksField = value;
        }
    }

    /// <remarks/>
    public ConfigurationMqttConfig MqttConfig
    {
        get
        {
            return this.mqttConfigField;
        }
        set
        {
            this.mqttConfigField = value;
        }
    }

    /// <remarks/>
    public ConfigurationServiceConfig ServiceConfig
    {
        get
        {
            return this.serviceConfigField;
        }
        set
        {
            this.serviceConfigField = value;
        }
    }
}

/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class ConfigurationDeviceLink
{

    private string uIDField;

    private string ipField;

    private ushort portField;

    private byte slaveIdField;

    private byte acqTimeSpanField;

    /// <remarks/>
    public string UID
    {
        get
        {
            return this.uIDField;
        }
        set
        {
            this.uIDField = value;
        }
    }

    /// <remarks/>
    public string Ip
    {
        get
        {
            return this.ipField;
        }
        set
        {
            this.ipField = value;
        }
    }

    /// <remarks/>
    public ushort Port
    {
        get
        {
            return this.portField;
        }
        set
        {
            this.portField = value;
        }
    }

    /// <remarks/>
    public byte SlaveId
    {
        get
        {
            return this.slaveIdField;
        }
        set
        {
            this.slaveIdField = value;
        }
    }

    /// <remarks/>
    public byte AcqTimeSpan
    {
        get
        {
            return this.acqTimeSpanField;
        }
        set
        {
            this.acqTimeSpanField = value;
        }
    }
}

/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class ConfigurationMqttConfig
{

    private string ipField;

    private ushort portField;

    private string usernameField;

    private ushort passwordField;

    /// <remarks/>
    public string Ip
    {
        get
        {
            return this.ipField;
        }
        set
        {
            this.ipField = value;
        }
    }

    /// <remarks/>
    public ushort Port
    {
        get
        {
            return this.portField;
        }
        set
        {
            this.portField = value;
        }
    }

    /// <remarks/>
    public string Username
    {
        get
        {
            return this.usernameField;
        }
        set
        {
            this.usernameField = value;
        }
    }

    /// <remarks/>
    public ushort Password
    {
        get
        {
            return this.passwordField;
        }
        set
        {
            this.passwordField = value;
        }
    }
}

/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class ConfigurationServiceConfig
{

    private byte pushTimeSpanField;

    private bool isPushScheduledField;

    private bool isPushChangedField;

    /// <remarks/>
    public byte PushTimeSpan
    {
        get
        {
            return this.pushTimeSpanField;
        }
        set
        {
            this.pushTimeSpanField = value;
        }
    }

    /// <remarks/>
    public bool IsPushScheduled
    {
        get
        {
            return this.isPushScheduledField;
        }
        set
        {
            this.isPushScheduledField = value;
        }
    }

    /// <remarks/>
    public bool IsPushChanged
    {
        get
        {
            return this.isPushChangedField;
        }
        set
        {
            this.isPushChangedField = value;
        }
    }
}
相关推荐
Venuslite4 天前
从 Unexpected token < 到 Extra data:一次讲清 JSON 解析错误的排查思路
json
疯狂SQL10 天前
手写高性能在线 JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
typescript·json·next.js·web worker·前端性能优化·esbuild·源码实战
tianyuanwo15 天前
深入解析 RISC-V 虚拟化中的 UEFI 固件配置:从 XML 到 NVRAM 的生命周期管理
xml·linux·risc-v
terry60015 天前
5G视频短信服务商选型全攻略:通道资源、架构能力与成本评估2026最新标准
大数据·人工智能·5g·json·asp.net·信息与通信·数据库架构
前网易架构师-高司机15 天前
带标注的辣椒病叶数据集,识别率95.9%,可识别三种病害和健康叶子,9916张图,支持yolo,coco json,voc xml,文末有模型训练代码
yolo·json·数据集·病害·叶病·病叶·辣椒
我不是懒洋洋16 天前
【C++】string(string的成员变量、auto和范围for、string常用接口的说明、OJ题目、string的模拟实现)
c语言·开发语言·c++·visual studio
PixelBai16 天前
JSON扁平化使用教程:从入门到精通
json
C++ 老炮儿的技术栈16 天前
Ubuntu root账号自动登陆
linux·运维·服务器·c语言·c++·ubuntu·visual studio
A.零点16 天前
【2个月 C 语言从入门到精通:零基础系统教程】第十二讲:深入了解指针(五)
c语言·开发语言·网络·笔记·visual studio