关于在网络中如何收发xml格式流的一种C#程序方法
2013-12-13 14:35
399 查看
初学C#感觉知识欠缺,就用博客的形式将一些知识点保存下来,便于以后查阅,有错误望指正.
关于如何通过在网络中发送xml文件流,每种编程语言都有自己的实现方法,而且方法还不止一种。正好最近在用C#写一个简单的小型数据存取服务器,用到了这个。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<common>
<project_id>01</project_id>
<gateway_id>01</gateway_id>
<type>notify</type>
</common>
<heart_beat operation="notify"/>
</root>
首先,这个文件是由下位机发送过来的,需要将里面各个元素的值保存的类中;
这里先定义三个 类 public class common_class public class heart_breat_class public class recvFromClient
{ public string project_id; { [xmlAttribute("operation")] { public common_class common;
public string gateway_id; public string operation; public heart_breat_class heart_breat;
public string type; public heart_breat_class()
c282
public recvFromClient()
public common_class() { operation="";} { common = new common_class();
{project_id="";gateway_id="";type="";} heart_breat = new heart_breat_class();}
这里肯定要用到XmlSerializer类来序列化xml文件,,忘了,,要声明recvFromClient可以序列化
XmlSerializer heart_beat_xml = new XmlSerializer(typeof(recvFromClient));
recvFromClient recv = new recvFromClient();
recv = (recvFromClient)heart_beat_xml.Deserialize(ms);
//这里ms是从网络中的读取到到xml文件存储内存流的一个实例
经过一个反序列化的过程,xml文件元素的值就存储到了相应类的成员中;
<?xml version="1.0" encoding="utf-8"?>
<root>
<common>
<project_id />
<pateway_id />
<type>heart_result</type>
</common>
<id_validate operation="heart_result">
<heart_result>0000</heart_result>
</id_validate>
</root>
上位机要发送这样一个文件给下位机作为成功接收 到网络心跳包的回应。
这里根元素有两个子元素,我们定义两个类;common类还用上面的类,
在定义一个 public class id_validate_classs { [Serializable]
[xmlAttribute("operation")] [XmlRoot("root")]
public string operation ; public class heartBeatToClient
public string heart_result; { public common_class common;
public id_validate_class() public id_validate_class id_validate;
{operation = "": heart_result="";} public heartBeatToClient()
} {operation = "";heart_result = "";}
XmlSerializer heart_to_client = new XmlSerializer(typeof(heartBeatToClient));
heartBeatToClient myHeartBeatToClient = new heartBeatToClient();
myHeartBeatToClient.common.project_id = myHeartBeatFromClient.common.project_id;
myHeartBeatToClient.common.gateway_id = myHeartBeatFromClient.common.gateway_id;
myHeartBeatToClient.common.type ="heart_result";
myHeartBeatToClient.id_validate.operation = "heart_result";
myHeartBeatToClient.id_validate.heart_result = "0000";
string strToSend;
strToSend = XMLSerialClassToString(myHeartBeatToClient);//用流发送的时候不接受类作为参数的.所以需要将这个类转变为流
byte[] strToSd = Encoding.UTF8.GetBytes(strToSend);
networkStream.Write(strToSd, 0, strToSd.Length); //通过netwrokSteam绑定的套接字发送出去;
string XMLSerialClassToString(heartBeatToClient t )
{
XmlSerializerNamespaces xml=new XmlSerializerNamespaces();
xml.add("","");//命名空间和浅醉我们都不需要,这里指定为空,不要编译器会默认加上命名空间和前缀
MemorySream ms =new MemoryStream();
StreamWriter sw=new StreamWriter(ms,Encoding.UTF8);
XmlSerializer xs=new XmlSerlialliaer(typeof(heartBeatToClient));
xs.Serialier(sw,t,xml);
return Encoding.UTF8.Getstring(ms.toArray());
}
关于如何通过在网络中发送xml文件流,每种编程语言都有自己的实现方法,而且方法还不止一种。正好最近在用C#写一个简单的小型数据存取服务器,用到了这个。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<common>
<project_id>01</project_id>
<gateway_id>01</gateway_id>
<type>notify</type>
</common>
<heart_beat operation="notify"/>
</root>
首先,这个文件是由下位机发送过来的,需要将里面各个元素的值保存的类中;
这里先定义三个 类 public class common_class public class heart_breat_class public class recvFromClient
{ public string project_id; { [xmlAttribute("operation")] { public common_class common;
public string gateway_id; public string operation; public heart_breat_class heart_breat;
public string type; public heart_breat_class()
c282
public recvFromClient()
public common_class() { operation="";} { common = new common_class();
{project_id="";gateway_id="";type="";} heart_breat = new heart_breat_class();}
这里肯定要用到XmlSerializer类来序列化xml文件,,忘了,,要声明recvFromClient可以序列化
XmlSerializer heart_beat_xml = new XmlSerializer(typeof(recvFromClient));
recvFromClient recv = new recvFromClient();
recv = (recvFromClient)heart_beat_xml.Deserialize(ms);
//这里ms是从网络中的读取到到xml文件存储内存流的一个实例
经过一个反序列化的过程,xml文件元素的值就存储到了相应类的成员中;
<?xml version="1.0" encoding="utf-8"?>
<root>
<common>
<project_id />
<pateway_id />
<type>heart_result</type>
</common>
<id_validate operation="heart_result">
<heart_result>0000</heart_result>
</id_validate>
</root>
上位机要发送这样一个文件给下位机作为成功接收 到网络心跳包的回应。
这里根元素有两个子元素,我们定义两个类;common类还用上面的类,
在定义一个 public class id_validate_classs { [Serializable]
[xmlAttribute("operation")] [XmlRoot("root")]
public string operation ; public class heartBeatToClient
public string heart_result; { public common_class common;
public id_validate_class() public id_validate_class id_validate;
{operation = "": heart_result="";} public heartBeatToClient()
} {operation = "";heart_result = "";}
XmlSerializer heart_to_client = new XmlSerializer(typeof(heartBeatToClient));
heartBeatToClient myHeartBeatToClient = new heartBeatToClient();
myHeartBeatToClient.common.project_id = myHeartBeatFromClient.common.project_id;
myHeartBeatToClient.common.gateway_id = myHeartBeatFromClient.common.gateway_id;
myHeartBeatToClient.common.type ="heart_result";
myHeartBeatToClient.id_validate.operation = "heart_result";
myHeartBeatToClient.id_validate.heart_result = "0000";
string strToSend;
strToSend = XMLSerialClassToString(myHeartBeatToClient);//用流发送的时候不接受类作为参数的.所以需要将这个类转变为流
byte[] strToSd = Encoding.UTF8.GetBytes(strToSend);
networkStream.Write(strToSd, 0, strToSd.Length); //通过netwrokSteam绑定的套接字发送出去;
string XMLSerialClassToString(heartBeatToClient t )
{
XmlSerializerNamespaces xml=new XmlSerializerNamespaces();
xml.add("","");//命名空间和浅醉我们都不需要,这里指定为空,不要编译器会默认加上命名空间和前缀
MemorySream ms =new MemoryStream();
StreamWriter sw=new StreamWriter(ms,Encoding.UTF8);
XmlSerializer xs=new XmlSerlialliaer(typeof(heartBeatToClient));
xs.Serialier(sw,t,xml);
return Encoding.UTF8.Getstring(ms.toArray());
}
相关文章推荐
- 关于C#如何动态加载程序并调用其中某个类的方法
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 关于如何在C#程序中访问windows用户的密码:
- 关于C#程序优化的五十种方法
- 关于c#中强制退出程序运行的两个方法比较
- 关于JOJ 2042的启发——一种写程序计算幂函数的方法
- 网络采集软件核心技术剖析系列(7)---如何使用C#语言搭建程序框架(经典Winform界面,顶部菜单栏,工具栏,左边树形列表,右边多Tab界面)
- 关于梦行monxin网络商城如何查询开店邀请码的方法
- C#一种变通的程序与窗口使用同一图标资源的方法
- 关于“ORA-12518: TNS: 监听程序无法分发客户机连接”的一种解决方法
- 关于如何制作Rss的一种方法!
- 关于优化C#程序的五十种方法
- 关于BS程序开发中如何防止页面被多次提交解决方法!
- C#实现程序启动唯一实例的一种方法
- 关于C#程序优化的五十种方法
- 关于如何制作Rss的一种简单方法![转]
- c# 关于如何连接数据库的几种方法(switch语句中)
- C# 两个程序如何获得同用内存,一程序调用另外一程序内的方法或函数
- 关于C#做出的小程序的调试细节 及 visible属性和几个C#中的事件方法
- 关于VMware虚拟机中的Ubuntu 12-04不能连接网络的一种解决方法