visual studio快速生成Json、XML对应类
在项目中经常用到json或者xml作为配置文件,进行序列化和反序列化就需要有对应的类,重新写一遍类就比较麻烦,这里就讲一下通过visual studio快速生成json或者xml对应类型的方法。
自动生成Json类
复制一个json文件,自动在visual studio中生成
复制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字段定义,自动生成对应的子类
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:
<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>
生成结果
// 注意: 生成的代码可能至少需要 .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;}}
}