C#实现实体类和XML相互转换

2023-05-16

一、实体类转换成XML

将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化

复制代码


public static string XmlSerialize<T>(T obj)
{
       using (StringWriter sw = new StringWriter())
       {
             Type t= obj.GetType();             
             XmlSerializer serializer = new XmlSerializer(obj.GetType());
             serializer.Serialize(sw, obj);
             sw.Close();
             return sw.ToString();
        }
}  

复制代码

示例:

1、定义实体类

复制代码


 1     [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
 2     [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
 3     public class Request
 4     {
 5 
 6         public string System { get; set; }
 7         public string SecurityCode { get; set; }
 8         public PatientBasicInfo PatientInfo { get; set; }      
 9     }
10 
11     /// <remarks/>
12     [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
13     public partial class PatientBasicInfo
14     {
15         public string PatientNo { get; set; }
16         public string PatientName { get; set; }
17         public string Phoneticize { get; set; }
18         public string Sex { get; set; }
19         public string Birth { get; set; }
20         public string BirthPlace { get; set; }
21         public string Country { get; set; }
22         public string Nation { get; set; }
23         public string IDNumber { get; set; }
24         public string SecurityNo { get; set; }
25         public string Workunits { get; set; }
26         public string Address { get; set; }
27         public string ZIPCode { get; set; }
28         public string Phone { get; set; }
29         public string ContactPerson { get; set; }
30         public string ContactShip { get; set; }
31         public string ContactPersonAdd { get; set; }
32         public string ContactPersonPhone { get; set; }
33         public string OperationCode { get; set; }
34         public string OperationName { get; set; }
35         public string OperationTime { get; set; }
36         public string CardNo { get; set; }
37         public string ChangeType { get; set; }
38 
39     }  

复制代码

2、给实体类赋值,并通过序列化将实体类转换成XML格式的字符串

复制代码


 1 Request patientIn = new Request();
 2             patientIn.System = "HIS";
 3             patientIn.SecurityCode = "HIS5";
 4 
 5             PatientBasicInfo basicInfo = new PatientBasicInfo();
 6             basicInfo.PatientNo = "1234";
 7             basicInfo.PatientName = "测试";
 8             basicInfo.Phoneticize = "";
 9             basicInfo.Sex = "1";
10             basicInfo.Birth = "";
11             basicInfo.BirthPlace = "";
12             basicInfo.Country = "";
13             basicInfo.Nation = "";
14             basicInfo.IDNumber = "";
15             basicInfo.SecurityNo = "";
16             basicInfo.Workunits = "";
17             basicInfo.Address = "";
18             basicInfo.ZIPCode = "";
19             basicInfo.Phone = "";
20             basicInfo.ContactShip = "";
21             basicInfo.ContactPersonPhone = "";
22             basicInfo.ContactPersonAdd = "";
23             basicInfo.ContactPerson = "";
24             basicInfo.ChangeType = "";
25             basicInfo.CardNo = "";
26             basicInfo.OperationCode = "";
27             basicInfo.OperationName = "";
28             basicInfo.OperationTime = "";
29 
30             patientIn.PatientInfo = basicInfo;
31 
32             //序列化
33             string strxml = XmlSerializeHelper.XmlSerialize<Request>(patientIn);  

复制代码

3、生成的XML实例

复制代码


 1 <?xml version="1.0" encoding="utf-16"?>
 2 <Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 3   <System>HIS</System>
 4   <SecurityCode>HIS5</SecurityCode>
 5   <PatientInfo>
 6     <PatientNo>1234</PatientNo>
 7     <PatientName>测试</PatientName>
 8     <Phoneticize />
 9     <Sex>1</Sex>
10     <Birth />
11     <BirthPlace />
12     <Country />
13     <Nation />
14     <IDNumber />
15     <SecurityNo />
16     <Workunits />
17     <Address />
18     <ZIPCode />
19     <Phone />
20     <ContactPerson />
21     <ContactShip />
22     <ContactPersonAdd />
23     <ContactPersonPhone />
24     <OperationCode />
25     <OperationName />
26     <OperationTime />
27     <CardNo />
28     <ChangeType />
29   </PatientInfo>
30 </Request>  

复制代码

二、将XML转换成实体类

把XML转换成相应的实体类,需要使用到XmlSerializer类的Deserialize方法,将XML进行反序列化。

复制代码


 1 public static T DESerializer<T>(string strXML) where T:class
 2 {
 3      try
 4     {
 5             using (StringReader sr = new StringReader(strXML))
 6            {
 7                 XmlSerializer serializer = new XmlSerializer(typeof(T));
 8                 return serializer.Deserialize(sr) as T;
 9            }
10      }
11      catch (Exception ex)
12      {
13             return null;
14      }
15 }  

复制代码

示例:

将上例中序列化后的XML反序列化成实体类


1 //反序列化
2 Request r = XmlSerializeHelper.DESerializer<Request>(strxml);  

 三、将DataTable转换成XML

复制代码


 1  //将DataTable转换成XML
 2 DataTable dt = new DataTable("MyTable");
 3 //添加列
 4 dt.Columns.Add("Id", typeof(int));
 5 dt.Columns.Add("Name", typeof(string));
 6 dt.Columns.Add("Sex", typeof(char));
 7 //添加行
 8 dt.Rows.Add(1, "小明", '1');
 9 dt.Rows.Add(2, "小红", '2');
10 dt.Rows.Add(3, "小王", '2');
11 dt.Rows.Add(4, "测试", '2');
12 //序列化,将DataTable转换成XML格式的字符串
13 string strXML = XmlSerializeHelper.XmlSerialize <DataTable> (dt);  

复制代码

四、将XML转换成DataTable


1 //反序列化,将XML转换成字符串
2 DataTable dtNew=  XmlSerializeHelper.DESerializer<DataTable>(strXML);  

五、将List集合转换成XML

复制代码


/// <summary>
/// 测试类
/// </summary>
public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public char Sex { get; set; }
    public int Age { get; set; }
}

//测试集合
List<Student> list = new List<Student>()
{
        new Student(){Id=1,Name="小红",Sex='2',Age=20},
        new Student(){Id=2,Name="小明",Sex='1',Age=22},
        new Student(){Id=3,Name="小王",Sex='1',Age=19},
        new Student(){Id=4,Name="测试",Sex='2',Age=23}
};
//序列化
string strXML = XmlSerializeHelper.XmlSerialize<List<Student>>(list);  

复制代码

六、将XML转换成集合

使用上面例子中集合转换成的XML进行反序列化。


1 //反序列化
2 List<Student> listStu = XmlSerializeHelper.DESerializer<List<Student>>(strXML);  

//**************************************

1、实体类与XML相互转换

将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化。

把XML转换成相应的实体类,需要使用到XmlSerializer类的Deserialize方法,将XML进行反序列化。

创建XML序列化公共处理类(XmlSerializeHelper.cs)


   
  1. using System;

  2. using System.IO;

  3. using System.Xml.Serialization;

  4.  
  5. /// <summary>

  6. /// XML序列化公共处理类

  7. /// </summary>

  8. public static class XmlSerializeHelper

  9. {

  10. /// <summary>

  11. /// 将实体对象转换成XML

  12. /// </summary>

  13. /// <typeparam name="T">实体类型</typeparam>

  14. /// <param name="obj">实体对象</param>

  15. public static string XmlSerialize<T>(T obj)

  16. {

  17. try

  18. {

  19. using (StringWriter sw = new StringWriter())

  20. {

  21. Type t = obj.GetType();

  22. XmlSerializer serializer = new XmlSerializer(obj.GetType());

  23. serializer.Serialize(sw, obj);

  24. sw.Close();

  25. return sw.ToString();

  26. }

  27. }

  28. catch (Exception ex)

  29. {

  30. throw new Exception("将实体对象转换成XML异常", ex);

  31. }

  32. }

  33.  
  34. /// <summary>

  35. /// 将XML转换成实体对象

  36. /// </summary>

  37. /// <typeparam name="T">实体类型</typeparam>

  38. /// <param name="strXML">XML</param>

  39. public static T DESerializer<T>(string strXML) where T : class

  40. {

  41. try

  42. {

  43. using (StringReader sr = new StringReader(strXML))

  44. {

  45. XmlSerializer serializer = new XmlSerializer(typeof(T));

  46. return serializer.Deserialize(sr) as T;

  47. }

  48. }

  49. catch (Exception ex)

  50. {

  51. throw new Exception("将XML转换成实体对象异常", ex);

  52. }

  53. }

  54. }

创建用户信息类,用于示例使用。


   
  1. /// <summary>

  2. /// 用户信息类

  3. /// </summary>

  4. public class UserInfo

  5. {

  6. /// <summary>

  7. /// 编号

  8. /// </summary>

  9. public int ID { get; set; }

  10.  
  11. /// <summary>

  12. /// 名称

  13. /// </summary>

  14. public string Name { get; set; }

  15.  
  16. /// <summary>

  17. /// 创建时间

  18. /// </summary>

  19. public DateTime? CreateTime { get; set; }

  20. }

1.1 示例1:将List与XML相互转换


   
  1. /// <summary>

  2. /// 将List与XML相互转换

  3. /// </summary>

  4. public static void ListToXmlTest()

  5. {

  6. //获取用户列表

  7. List<UserInfo> userList = GetUserList();

  8.  
  9. //将实体对象转换成XML

  10. string xmlResult = XmlSerializeHelper.XmlSerialize(userList);

  11.  
  12. //将XML转换成实体对象

  13. List<UserInfo> deResult = XmlSerializeHelper.DESerializer<List<UserInfo>>(xmlResult);

  14. }

  15.  
  16. /// <summary>

  17. /// 获取用户信息列表

  18. /// </summary>

  19. public static List<UserInfo> GetUserList()

  20. {

  21. List<UserInfo> userList = new List<UserInfo>();

  22. userList.Add(new UserInfo() { ID = 1, Name = "张三", CreateTime = DateTime.Now });

  23. userList.Add(new UserInfo() { ID = 2, Name = "李四", CreateTime = DateTime.Now });

  24. userList.Add(new UserInfo() { ID = 2, Name = "王五" });

  25. return userList;

  26. }

XML结果:


   
  1. <?xml version="1.0" encoding="utf-16"?>

  2. <ArrayOfUserInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  3. <UserInfo>

  4. <ID>1</ID>

  5. <Name>张三</Name>

  6. <CreateTime>2018-10-04T15:59:53.7761027+08:00</CreateTime>

  7. </UserInfo>

  8. <UserInfo>

  9. <ID>2</ID>

  10. <Name>李四</Name>

  11. <CreateTime>2018-10-04T15:59:54.9571044+08:00</CreateTime>

  12. </UserInfo>

  13. <UserInfo>

  14. <ID>2</ID>

  15. <Name>王五</Name>

  16. <CreateTime xsi:nil="true" />

  17. </UserInfo>

  18. </ArrayOfUserInfo>

1.2 示例2:将DataTable与XML相互转换


   
  1. /// <summary>

  2. /// 将DataTable与XML相互转换

  3. /// </summary>

  4. public static void DataTableToXmlTest()

  5. {

  6. //创建DataTable对象

  7. DataTable dt = CreateDataTable();

  8.  
  9. //将DataTable转换成XML

  10. string xmlResult = XmlSerializeHelper.XmlSerialize(dt);

  11.  
  12. //将XML转换成DataTable

  13. DataTable deResult = XmlSerializeHelper.DESerializer<DataTable>(xmlResult);

  14. }

  15.  
  16. /// <summary>

  17. /// 创建DataTable对象

  18. /// </summary>

  19. public static DataTable CreateDataTable()

  20. {

  21. //创建DataTable

  22. DataTable dt = new DataTable("NewDt");

  23.  
  24. //创建自增长的ID列

  25. DataColumn dc = dt.Columns.Add("ID", Type.GetType("System.Int32"));

  26. dt.Columns.Add(new DataColumn("Name", Type.GetType("System.String")));

  27. dt.Columns.Add(new DataColumn("CreateTime", Type.GetType("System.DateTime")));

  28.  
  29. //创建数据

  30. DataRow dr = dt.NewRow();

  31. dr["ID"] = 1;

  32. dr["Name"] = "张三";

  33. dr["CreateTime"] = DateTime.Now;

  34. dt.Rows.Add(dr);

  35.  
  36. dr = dt.NewRow();

  37. dr["ID"] = 2;

  38. dr["Name"] = "李四";

  39. dr["CreateTime"] = DateTime.Now;

  40. dt.Rows.Add(dr);

  41.  
  42. dr = dt.NewRow();

  43. dr["ID"] = 3;

  44. dr["Name"] = "王五";

  45. dr["CreateTime"] = DateTime.Now;

  46. dt.Rows.Add(dr);

  47.  
  48. return dt;

  49. }

XML结果:


   
  1. <?xml version="1.0" encoding="utf-16"?>

  2. <DataTable>

  3. <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

  4. <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="NewDt" msdata:UseCurrentLocale="true">

  5. <xs:complexType>

  6. <xs:choice minOccurs="0" maxOccurs="unbounded">

  7. <xs:element name="NewDt">

  8. <xs:complexType>

  9. <xs:sequence>

  10. <xs:element name="ID" type="xs:int" minOccurs="0" />

  11. <xs:element name="Name" type="xs:string" minOccurs="0" />

  12. <xs:element name="CreateTime" type="xs:dateTime" minOccurs="0" />

  13. </xs:sequence>

  14. </xs:complexType>

  15. </xs:element>

  16. </xs:choice>

  17. </xs:complexType>

  18. </xs:element>

  19. </xs:schema>

  20. <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">

  21. <DocumentElement>

  22. <NewDt diffgr:id="NewDt1" msdata:rowOrder="0" diffgr:hasChanges="inserted">

  23. <ID>1</ID>

  24. <Name>张三</Name>

  25. <CreateTime>2018-10-04T16:06:10.8004082+08:00</CreateTime>

  26. </NewDt>

  27. <NewDt diffgr:id="NewDt2" msdata:rowOrder="1" diffgr:hasChanges="inserted">

  28. <ID>2</ID>

  29. <Name>李四</Name>

  30. <CreateTime>2018-10-04T16:06:10.8004082+08:00</CreateTime>

  31. </NewDt>

  32. <NewDt diffgr:id="NewDt3" msdata:rowOrder="2" diffgr:hasChanges="inserted">

  33. <ID>3</ID>

  34. <Name>王五</Name>

  35. <CreateTime>2018-10-04T16:06:10.8004082+08:00</CreateTime>

  36. </NewDt>

  37. </DocumentElement>

  38. </diffgr:diffgram>

  39. </DataTable>

2、序列化常用Attribute讲解说明

[XmlRootAttribute("MyCity", Namespace="abc.abc", IsNullable=false)]     // 当该类为Xml根节点时,以此为根节点名称。
public class City

[XmlAttribute("AreaName")]    // 表现为Xml节点属性。<... AreaName="..."/>
public string Name

[XmlElementAttribute("AreaId", IsNullable = false)]    // 表现为Xml节点。<AreaId>...</AreaId>
public string Id

[XmlArrayAttribute("Areas")]    // 表现为Xml层次结构,根为Areas,其所属的每个该集合节点元素名为类名。<Areas><Area ... /><Area ... /></Areas>
public Area[] Areas

[XmlElementAttribute("Area", IsNullable = false)]    // 表现为水平结构的Xml节点。<Area ... /><Area ... />...
public Area[] Areas

[XmlIgnoreAttribute]    // 忽略该元素的序列化。

把这些属性与model类的相关属性,配合使用,就可以自由设置相关XML的具体格式了。

综合示例:将班级信息序列化成XML

示例要求:

(1)每个XML节点以“My”开头。

(2)班级ID和学生ID字段以XML节点属性表现,其它字段以XML节点的形式表现。

(3)由于学生的邮箱涉及敏感信息,所以不参与序列化。

2.1 创建班级信息类(ClassInfo.cs)


   
  1. using System.Collections.Generic;

  2. using System.Xml.Serialization;

  3.  
  4. /// <summary>

  5. /// 班级信息类

  6. /// </summary>

  7. [XmlRootAttribute("MyClassInfo", Namespace = "ABC_123", IsNullable = false)]

  8. public class ClassInfo

  9. {

  10. /// <summary>

  11. /// 班级ID

  12. /// </summary>

  13. [XmlAttribute("MyClassID")]

  14. public int ClassID { get; set; }

  15.  
  16. /// <summary>

  17. /// 班级名称

  18. /// </summary>

  19. [XmlElementAttribute("MyClassName", IsNullable = false)]

  20. public string ClassName { get; set; }

  21.  
  22. /// <summary>

  23. /// 班长人

  24. /// </summary>

  25. [XmlElementAttribute("MyTeacher", IsNullable = false)]

  26. public string Teacher { get; set; }

  27.  
  28. /// <summary>

  29. /// 学生列表

  30. /// </summary>

  31. [XmlArrayAttribute("MyStudents")]

  32. public List<Student> StudentList { get; set; }

  33. }

2.2 创建学生信息类(Student.cs)


   
  1. using System.Xml.Serialization;

  2.  
  3. /// <summary>

  4. /// 学生信息类

  5. /// </summary>

  6. [XmlRootAttribute("MyStudent", IsNullable = false)]

  7. public class Student

  8. {

  9. /// <summary>

  10. /// 学生ID

  11. /// </summary>

  12. [XmlAttribute("MyStuID")]

  13. public int StuID { get; set; }

  14.  
  15. /// <summary>

  16. /// 学生名称

  17. /// </summary>

  18. [XmlElementAttribute("MyStuName", IsNullable = false)]

  19. public string StuName { get; set; }

  20.  
  21. /// <summary>

  22. /// 性别

  23. /// </summary>

  24. [XmlElementAttribute("MySex", IsNullable = false)]

  25. public string Sex { get; set; }

  26.  
  27. /// <summary>

  28. /// 邮箱

  29. /// </summary>

  30. [XmlIgnoreAttribute]

  31. public string Email { get; set; }

  32. }

2.3 将班级信息转换成XML


   
  1. /// <summary>

  2. /// 将班级信息转换成XML

  3. /// </summary>

  4. public static void ClassInfoToXml()

  5. {

  6. //获取班级信息

  7. ClassInfo classInfo = GetClassInfo();

  8.  
  9. //将班级信息转换成XML

  10. string classXml = XmlSerializeHelper.XmlSerialize(classInfo);

  11. }

  12.  
  13. /// <summary>

  14. /// 获取班级信息

  15. /// </summary>

  16. public static ClassInfo GetClassInfo()

  17. {

  18. //创建班级信息

  19. ClassInfo classInfo = new ClassInfo();

  20. classInfo.ClassID = 1;

  21. classInfo.ClassName = "高一(5)班";

  22. classInfo.Teacher = "李老师";

  23.  
  24. //创建学生列表

  25. List<Student> studentList = new List<Student>();

  26. studentList.Add(new Student() { StuID = 1, StuName = "张三", Sex = "男", Email = "zhangsan@mail.com" });

  27. studentList.Add(new Student() { StuID = 2, StuName = "李四", Sex = "女", Email = "lisi@mail.com" });

  28. studentList.Add(new Student() { StuID = 3, StuName = "王五", Sex = "男", Email = "wangwu@mail.com" });

  29. classInfo.StudentList = studentList;

  30.  
  31. return classInfo;

  32. }

XML结果:


   
  1. <?xml version="1.0" encoding="utf-16"?>

  2. <MyClassInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" MyClassID="1" xmlns="ABC_123">

  3. <MyClassName>高一(5)班</MyClassName>

  4. <MyTeacher>李老师</MyTeacher>

  5. <MyStudents>

  6. <Student MyStuID="1">

  7. <MyStuName>张三</MyStuName>

  8. <MySex>男</MySex>

  9. </Student>

  10. <Student MyStuID="2">

  11. <MyStuName>李四</MyStuName>

  12. <MySex>女</MySex>

  13. </Student>

  14. <Student MyStuID="3">

  15. <MyStuName>王五</MyStuName>

  16. <MySex>男</MySex>

  17. </Student>

  18. </MyStudents>

  19. </MyClassInfo>

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#实现实体类和XML相互转换 的相关文章

  • C#使用SafeNet的开发狗和超级狗加密使用方法

    1 在安装光盘中选择Windows文件夹 xff0c 单击Setup exe执行安装程序 xff0c 安装过程默认选择 xff0c 单击下一步即可 2 安装完毕后插入超级狗 xff0c 在菜单栏中打开 超级狗开发商向导 xff0c 选择下载
  • Keil5 新建工程编译后Download按钮变灰

    Keil5 新建工程编译后Download按钮变灰 百度看到很多文章解决变灰方法为 这个主要目的是生成 HEX文件 xff0c 但有时候当你在线下载时点了Creat HEX File 并进行编译后 Download按钮依然呈现灰色 此时问题
  • C# SQLite 数据库操作语句与文件视图管理器

    sqlite数据库视图管理器 SQLiteSpy是一款专业的SQLite数据库管理 xff0c 主要用于读取sqlite数据库 xff0c 建立新的SQL查询 xff0c 视图 xff0c 复制和删除表 编辑单元格 xff0c 以及查看索引
  • C#JSON与XML相互转换

    using System using System Collections Generic using System Linq using System Text using System Xml using Newtonsoft Json
  • 让使用SQLite的.NET应用自适应32位/64位系统

    Windows 7 64 bit 刚扩到4G内存 果断换64位的 那速度杠杠的 Microsoft Visual Studio 2010 Ultimate 32bit 在64位系统里运行正常 sqlite netFx40 setup bun
  • WinForm 布局控件“WeifenLuo.WinFormsUI.Docking“的使用

    本篇介绍Winform程序开发中的布局界面的设计 xff0c 介绍如何在我的共享软件中使用布局控件 34 WeifenLuo WinFormsUI Docking 34 布局控件 34 WeifenLuo WinFormsUI Dockin
  • C#中JSON和对象之间互相转换功能示例

    本文实例讲述了C 实现JSON和对象之间互相转换功能 分享给大家供大家参考 xff0c 具体如下 xff1a 1 首先是声明用户信息对象 xff0c DataContract修饰类 xff0c 表示可以被解析成JSON xff0c Data
  • C#使用DataContractJsonSerializer来进行JSON解析

    在使用DataContractJsonSerializer进行解析之前 xff0c 我们首先需要将两个包引入进来 xff1a using System Runtime Serialization using System Runtime S
  • 步进电机驱动器脉冲频率确定 步进电机驱动器

    1 步进电机为什么要配步进电机驱动器才能工作 xff1f 步进电机作为一种控制精密位移及大范围调速专用的电机 它的旋转是以自身固有的步距角角 xff08 转子与定子的机械结构所决定 xff09 一步一步运行的 其特点是每旋转一步 xff0c
  • MFC添加自定义消息及重写消息过程

    由于MFC中无法通过类向导来自定义消息 xff0c 所以需要手动添加 xff0c 主要过程如下 xff1a 本文基于vs2008下通过线程实现数据实时更新的对话框运用程序 1 定义消息 xff08 Resource h文件中 xff09 x
  • C#操作注册表方法

    1 xff1a 要操作注册表 xff0c 我们必须要引入必要的命名空间 xff1a using Microsoft Win32 在这个命名空间里面包含了许多注册表相关的类 xff0c 足够我们使用了 2 xff1a 命名空间里面提供了一个类
  • 怎样测试ESP8266wifi模块?

    这里测试的方法是用USB TTL转换电路进行的测试 接线图如下所示 xff1a ESP8266引脚图如下 xff1a 因为ESP8266需要3 3V电压供电 xff0c 所以USB TTL的3 3V电压 xff0c GND分别与ESP826
  • Qt信号与槽机制

    一 简介 就我个人来理解 xff0c 信号槽机制与Windows下消息机制类似 xff0c 消息机制是基于回调函数 xff0c Qt中用信号与槽来代替函数指针 xff0c 使程序更安全简洁 信号和槽机制是 Qt 的核心机制 xff0c 可以
  • QT中手动释放堆中的对象(new 出来的)

    Qt内存自动释放有两个前提条件 xff1a 1 必须是QObject的派生类 2 必须指定了parent对象 即 xff1a Qt 中 父亲被删除的时候会自动销毁他的孩子 所以如果New出来的并且没有父亲 那么则需要手动删除它 需要 xff
  • c++指针概念回顾

    前言 复杂类型说明 要了解指针 多多少少会出现一些比较复杂的类型 所以我先介绍一下如何完全理解一个复杂类型 要理解复杂类型其实很简单 一个类型里会出现很多运算符 他们也像普通的表达式一样 有优先级 其优先级和运算优先级一样 所以我总结了一下
  • c语言指针详解(概念示例)

    指针是 xff23 语言中广泛使用的一种数据类型 运用指针编程是 xff23 语言最主要的风格之一 利用指针变量可以表示各种数据结构 xff1b 能很方便地使用数组和字符串 xff1b 并能象汇编语言一样处理内存地址 xff0c 从而编出精
  • C#中模态对话框释放问题

    以下实例中可以测出 xff0c 当一个模态对话框返回DialogResult的结果后 xff0c 对话框自动隐藏 xff0c 但对话框db并没有彻底释放掉 xff0c 因此 仍可以访问db中的成员 xff0c 想要彻底释放需要手动加上db
  • qt中设置窗体大小

    在我们的编程中 xff0c 我们有时候会想让我们的程序窗体固定大小 xff0c 而该大小是我们在编辑时的大小 经过我的摸索 xff0c 和查阅资料 找到了一个方法 其实也很简单 其实也就是先找到该窗体的物理大小 然后设置固定窗体的大小即可
  • c++ (QT)笔记

    1 标准情况下 xff0c c 43 43 中的类声明都在头文件中 xff0c 实现在 cpp文件中 xff0c 所以只在 cpp中实现类的函数在头文件中没有声明会报错 c 43 43 的函数实现和声明都可放在头文件中这样 cpp文件也可访
  • C语言中指针动态内存的申请和释放

    什么是动态内存的申请和释放 xff1f 当程序运行到需要一个动态变量时 xff0c 需要向系统的堆中申请一块内存 xff0c 用来存储这块变量 xff0c 这就是内存的申请 当程序不需要这个变量时 xff0c 就需要把申请的这块内存释放掉

随机推荐

  • Qt中线程使用汇总

    QThread类提供一种独立于平台的线程管理方式 方法1 一个QThread实例管理程序中的一个线程 QThread的执行开始于run 默认情况下 xff0c run 通过调用exec 启动事件循环 xff0c 并在线程内运行Qt事件循环
  • 对线程与进程的区别以及对多线程并发的理解

    一 线程与进程的区别 先简单说说线程与进程的概念 xff1a xff08 1 xff09 进程是指一个内存中运行的应用程序 xff0c 比如在Windows系统中 xff0c 一个运行的exe就是一个进程 xff08 2 xff09 线程是
  • 单片机学习经验总结

    单片机的学习是嵌入式中的裸机开发 xff0c 也就是不基于操作系统的开发过程 xff0c 你只要把自己学的程序下载到单片机内执行即可 xff08 这个过程有个专业术语 xff1a 烧写 xff09 在这个过程中 xff0c 你所写的程序 x
  • 三极管的工作原理(详细、通俗易懂、图文并茂)

    一 很多初学者都会认为三极管是两个 PN 结的简单凑合 xff08 如图1 xff09 这种想法是错误的 xff0c 两个二极管的组合不能形成一个三极管 我们以 NPN 型三极管为例 xff08 见图 2 xff09 xff0c 两个 PN
  • 三极管工作原理图解,快速了解三极管结构和工作原理

    了解三极管工作原理前 xff0c 先看一张三极管内部结构原理图 xff1b 从图中可以清晰的看出NPN和PNP内部结构的区别 三极管NPN型和PNP型的工作原理 xff1a NPN三极管 xff1a Vb lt Ve xff08 截止状态
  • C# 获取进程或线程的信息

    using System using System Collections Generic using System Linq using System Text using System Diagnostics namespace Con
  • C#图片保存与读取,以及图片另存操作

    照片的保存与读取 lt summary gt 图片转二进制 lt summary gt lt param name 61 34 imgPhoto 34 gt 图片对象 lt param gt lt returns gt 二进制 lt ret
  • C#异常解决:在调用OLE之前,必须将当前线程设置为单线程单单元(STA)模式。

    问题来源 xff1a 昨晚上在调试数据库大作业的时候 xff0c 我在注册界面Register里点击 34 上传头像 34 这个linklabel时 xff0c 程序出现了一个异常 xff1a 在调用OLE之前 xff0c 必须将当前线程设
  • Qt调用OpenCV汇总(1)

    1 在Qt Creator上新建一个项目 右键新项目 gt gt 添加库 gt gt 外部库 gt gt 选中库文件路径 gt gt 下一步 xff0c 完成 xff0c 添加到 pro文件中 然后再在pro文件中手动输入下面代码 xff1
  • qt调用opencv汇总(2)

    OpenCV3 4 3 43 Qt5 9 4 QtCreator 开发环境搭建 之前有过对OpenCV3 4 2 43 VS2015编译及环境搭建 xff0c 今天使用OpenCV3 4 3 43 QtCreator5 9 4编译及环境搭建
  • 关于QT下配置OpenCV3.4.0后出现 error: undefined reference to ‘cv::xxx‘的问题及解决方案,直接使用编译好的opencv库

    按照网上的办法 xff0c 在QT中pro文件末尾添加以下代码来引入OpenCV的库和头文件 xff1a INCLUDEPATH 43 61 D OpenCV3 4 opencv build mingw install x64 mingw
  • C#实现最小二乘法

    根据http zh wikipedia org wiki E6 9C 80 E5 B0 8F E4 BA 8C E4 B9 98 E6 B3 95里面的说法 xff1a 线性函数模型 典型的一类函数模型是线性函数模型 最简单的线性式是 xf
  • C++动态(显式)调用 C++ dll示例

    1 创建DLL新项目Dll1 xff0c Dll1 cpp 1 extern 34 C 34 declspec dllexport const char myfunc 2 3 return 34 hello 34 4 生成后 xff0c 将
  • 用quagga建立BGP会话

    本文将讲述使用quagga建立一个BGP会话 本次测试拓扑 假设运营商A与运营商B建立BGP对等互联来交换路由 下面是她们的AS号和IP地址范围 xff1a 运营商 A AS38372 xff0c IP段 172 16 0 0 16 xff
  • c++中堆、栈内存分配概念示例讲解

    首先来看看主要有几种程序内存分配 xff1a 一个由C C 43 43 编译程序占用内存分为以下几个部分 1 栈区 xff08 stack xff09 由编译器自动分配释放 xff0c 存放函数参数值 xff0c 局部变量值等 其操作方式类
  • winform窗体控件多,加载慢、卡顿的解决办法

    protected override CreateParams CreateParams get CreateParams cp 61 base CreateParams cp ExStyle 61 0x02000000 用双缓冲绘制窗口的
  • c# 中ToolStrip控件中button控件,显示文字和图标

    1 同时显示文字和图标 DisplayStyle 属性设为 ImageAndText DisplayStyle属性用来设置图标的显示状态为 图片 文字 图片和文字 ImageRelation 属性设为 ImageBeforeText Tex
  • C#中的线程池使用方法

    1 线程池的概念 许多应用程序使用多个线程 xff0c 但这些线程经常在休眠状态中耗费大量的时间来等待事件发生 其他线程可能进入休眠状态 xff0c 并且仅定期被唤醒以轮询更改或更新状态信息 xff0c 然后再次进入休眠状态 为了简化对这些
  • C# 读写ini配置文件demo

    INI就是扩展名为 34 INI 34 的文件 其实他本身是个文本文件 可以用记事本打工 主要存放的是用户所做的选择或系统的各种参数 INI文件其实并不是普通的文本文件 它有自己的结构 由若干段落 SECTION 组成 在每个带括号的标题下
  • C#实现实体类和XML相互转换

    一 实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法 xff0c 将实体类序列化 public static string XmlSerialize lt T gt T obj using