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;
}
}
}