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;
        }
    }
}
相关推荐
sc写算法3 小时前
基于nlohmann/json 实现 从C++对象转换成JSON数据格式
开发语言·c++·json
酷爱码11 小时前
Spring Boot项目中JSON解析库的深度解析与应用实践
spring boot·后端·json
不惑_16 小时前
用 PyQt5 打造一个可视化 JSON 数据解析工具
开发语言·qt·json
敲敲敲-敲代码17 小时前
【Visual Studio 2022】卸载安装,ASP.NET
ide·visual studio
漫游者Nova19 小时前
PDF转Markdown/JSON软件MinerU最新1.3.12版整合包下载
pdf·json·markdown·mineru
Ll130452529819 小时前
JsonCpp 库如何集成到Visual studio
ide·visual studio
新兴AI民工20 小时前
windows上的visual studio2022的项目使用jenkins自动打包
windows·jenkins·visual studio
WarPigs20 小时前
Visual Studio问题记录
ide·windows·visual studio
Eiceblue1 天前
C# 快速检测 PDF 是否加密,并验证正确密码
开发语言·pdf·c#·visual studio
新知图书1 天前
下载和安装Visual Studio(开发ASP.NET MVC应用)
ide·asp.net·visual studio