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;
        }
    }
}
相关推荐
数据知道1 小时前
PostgreSQL实战:详解如何用Python优雅地从PG中存取处理JSON
python·postgresql·json
JQLvopkk1 小时前
C# 实践AI :Visual Studio + VSCode 组合方案
人工智能·c#·visual studio
踏过山河,踏过海3 小时前
【qt-查看对应的依赖的一种方法】
qt·visual studio
承渊政道6 小时前
C++学习之旅【C++中模板进阶内容介绍】
c语言·c++·笔记·学习·visual studio
缘空如是16 小时前
基础工具包之JSON 工厂类
java·json·json切换
墨痕诉清风1 天前
CVS文件转Json格式
json·python3·cvs
数研小生1 天前
1688商品列表API:高效触达批发电商海量商品数据的技术方案
大数据·python·算法·信息可视化·json
devmoon1 天前
快速了解兼容 Ethereum 的 JSON-RPC 接口
开发语言·网络·rpc·json·区块链·智能合约·polkadot
dzj20211 天前
Visual Studio2022中好用的AI编码工具介绍——Windsurf(Codeium)
ide·ai·visual studio·code
九转成圣1 天前
告别肉眼解析!Java 递归实现 JSON 全路径自动化探测工具
java·自动化·json