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;
        }
    }
}
相关推荐
ChoSeitaku1 小时前
NO.4|protobuf网络版通讯录|httplib|JSON、XML、ProtoBuf对比
xml·json
楼田莉子2 小时前
C++高性能并发内存池:三种Cache的设计及其内存申请释放
c++·后端·链表·哈希算法·visual studio
青衫客363 小时前
浅谈 Java 后端对象映射:从 JSON → VO → Entity 的原理与实践
java·json
qqxhb11 小时前
11|结构化输出:为什么 JSON 能让系统更稳定
json·ai编程·结构化·规范模板
弹简特20 小时前
【JavaEE19-后端部分】 MyBatis 入门第三篇:使用XML完成增删改查
xml·mybatis
小黑要努力21 小时前
json-c安装以及amixer使用
linux·运维·json
无限进步_1 天前
【C++】单词反转算法详解:原地操作与边界处理
java·开发语言·c++·git·算法·github·visual studio
spencer_tseng1 天前
Tomcat server.xml <Connector> address=“0.0.0.0“
xml·tomcat
听风者一号1 天前
cssMoudle生成器
前端·javascript·json
承渊政道1 天前
C++学习之旅【IO库相关内容介绍】
c语言·开发语言·c++·学习·macos·visual studio