概述
由于最近写了一个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传输问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复