我是靠谱客的博主 温婉钥匙,最近开发中收集的这篇文章主要介绍C#Xml,json解析以及Socket传输问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

由于最近写了一个C#小项目,特此来总结下c#的常见问题

1.xml解析

 <span style="white-space:pre">	</span>
XmlDocument xmlDoc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档里面的注释
XmlReader reader = XmlReader.Create(@"....CommonDict.xml", settings);
xmlDoc.Load(reader);
XmlNode xn = xmlDoc.SelectSingleNode("Dictionary");
XmlNodeList xnl = xn.ChildNodes;
foreach (XmlNode xnf in xnl)
{
XmlElement xe = xnf as XmlElement;
将xml文件读取到字典里

2.json解析

这里给大家说一个很简单的方法

点击vs的工具-----》NuGet包管理器--------》程序包管理器控制台

这下在控制台中输入install-package newtonsoft.json
就是导入一个newtonsoft.json包他是.NET中开源的JSon序列化和反序列化类库

json字符串反序列化为类

DiskFolder folder = JsonConvert.DeserializeObject<DiskFolder>(sendinfo[1])

而类序列化为字符串则更简单

message = JsonConvert.SerializeObject(diskfolder);

3.socket信息传输


手机客户端的发送与接收消息主要采用的DataReader和DataWriter类

DataReader常用函数


public IBuffer ReadBuffer(System.UInt32 length);
public void ReadBytes(System.Byte[] value);
public DateTimeOffset ReadDateTime();
public System.Double ReadDouble();
public Guid ReadGuid();
public System.Int16 ReadInt16();
public System.Int32 ReadInt32();
public System.Int64 ReadInt64();
//
从输入流中读取浮点值。
public System.Single ReadSingle();
//
从输入流中读取字符串值。
public System.String ReadString(System.UInt32 codeUnitCount);
//
从输入流中读取时间间隔值。
public TimeSpan ReadTimeSpan();
//
从输入流中读取 16 位无符号整数。
public System.UInt16 ReadUInt16();
//
从输入流中读取 32 位无符号整数。
public System.UInt32 ReadUInt32();
//
从输入流中读取 64 位无符号整数。
public System.UInt64 ReadUInt64();


发送

<span style="color:#ff0000;"> </span> using (DataWriter writer = new DataWriter(socket.OutputStream))
{
try
{
writer.WriteBytes(buffer);
await writer.StoreAsync();
//提交数据
await writer.FlushAsync();
//刷新数据
writer.DetachStream();
//分离流
writer.Dispose();
//关闭
}
catch (Exception e)
{
await new MessageDialog(e.Message).ShowAsync();
socket.Dispose();
}
}

接收


<span style="white-space:pre">
</span>DataReader reader = new DataReader(stream.InputStream);
reader.InputStreamOptions = InputStreamOptions.Partial;
//异步读取
try
{
await reader.LoadAsync(sizeof(Int64));
//从流中加载一个long长度的数据
string length = reader.ReadString(sizeof(Int64));
//获取所加载的long长度的数据
uint fileLength = Convert.ToUInt32(length);
await reader.LoadAsync(fileLength);
//从流中加载一个filelength长度的数据
filebuffer = new byte[fileLength];
reader.ReadBytes(filebuffer);
//获取所加载的数据

DataReader和DatatWriter之间只要发送接收格式的顺序正确(先发一个int字节的,接收时就要先接收一个int字节的),他们本质上操作的还是对数据流的操作即byte类型


还有一点应该注意的是,一般会把DataReader放在using里面,为了合理释放内存,但是在循环接收信息时,由于对象会被释放,则在第二次加载数据时会抛出异常:意思就是对象已被释放,所以在循环接收数据时,就不要放在using里面了

4.获取手机sd卡文件

此处使用类KnownFolders.,此类也可以获取到手机的音乐库,图片库

 <span style="white-space:pre">	</span>
StorageFile file = null;
StorageFolder storagefolder = KnownFolders.RemovableDevices;
foreach (var f in await storagefolder.GetFoldersAsync())
{
foreach (var SDfolder in await f.GetFoldersAsync())
{
if (SDfolder.Name == "Downloads")
{
file = await SDfolder.CreateFileAsync("textfile.png", CreationCollisionOption.ReplaceExisting);
File.WriteAllBytes(file.Path, filebuffer);
break;
}
}
}


以后如果忘了就可以看看今天写的博客了


最后

以上就是温婉钥匙为你收集整理的C#Xml,json解析以及Socket传输问题的全部内容,希望文章能够帮你解决C#Xml,json解析以及Socket传输问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部