`
hududanyzd
  • 浏览: 815581 次
文章分类
社区版块
存档分类
最新评论

使用Joson的格式字符串在Socket中通讯时数据格式的转换

 
阅读更多

最近在测试通讯模块时,发现新增的Android平台发送过来的数据,服务器端总是收不到,后来发现java中数据类型有些和C#中的不一样,比如C#中byte对应范围是0~255,而Java中则对应的是-128~127,因此直接按照通讯协议传序列化的二进制流总是出现问题。考虑到这一点在Android那一端才用Joson序列化发送到服务端,而在服务端对接收到的数据进行反序列化后转化为对象。同时在服务端进行发送数据时,转换为Joson格式后,序列化为二进制流发生给Android端。

废话不多说了,上代码:

//Joson格式的二进制流转换为对象

public static T JosonDeSerializer<T>(byte[] buffer, int length)
{
try
{
string mTextReceived = Encoding.UTF8.GetString(buffer, 0, length);

//将获取到的Joson格式字符串转换为数据包类
SocketDataPack sdp = GetSocketDataPackFromString(mTextReceived);
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();

//将数据包类序列化
formatter.Serialize(stream, sdp);
stream.Position = 0;
stream.Flush();

//转换为对象
object obj = formatter.Deserialize(stream);
if (obj == null)
{
return default(T);
}
return (T)obj;
}
catch (Exception ex)
{
throw ex;
}
}
//对象转换为Joson格式二进制流
public static byte[] JosonSerializer(object input)
{
try
{
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
string strSocketDataPack = jsonSerializer.Serialize(input);
byte[] buffer = Encoding.UTF8.GetBytes(strSocketDataPack);
return buffer;
}
catch (Exception ex)
{
throw ex;
}

}
/// <summary>
/// 将Json格式的字符串转换为指定的数据包类
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
private static SocketDataPack GetSocketDataPackFromString(string context)
{
try
{
SocketDataPack sdp = new SocketDataPack();
context = context.Replace("{", "").Replace("[", "").Replace("]", "").Replace("}", "").Replace("\"", "").Replace("\0","");
String[] str = context.Split(',');
for (int i = 0; i < str.Length; i++)
{
String[] str2 = str[i].Split(':');
switch (str2[0])
{
case "Length":
sdp.Length = Convert.ToInt16(str2[1]);
break;
case "Head":
sdp.Head = Convert.ToByte(str2[1]);
break;
//中间的数据包类的类型省略
。。。
case "Status":
sdp.Status = Convert.ToByte(str2[1]);
break;
case "Tail":
sdp.Tail = Convert.ToByte(Convert.ToInt16(str2[1]));
break;
}
}
return sdp;
}
catch (Exception ex)
{
throw ex;
}
}

分享到:
评论

相关推荐

    joson字符串

    joson字符串,这是我第一次学习字符串的知识,后来我下载一个工具进行打开了它,我学会了好多知识奥

    将数据类型序列化比如datatable转joson

    在处理大量数据时,避免过度的字符串拼接是优化性能的重要策略。在.NET中,使用StringBuilder类进行字符串操作通常比直接使用 "+" 运算符进行拼接更高效,因为它减少了内存分配的次数。例如,当需要构建JSON字符串时...

    josn 各种转换

    当你从服务器获取到JSON数据时,通常需要将其转换为Java对象以便进一步处理。Java中常用的库如Gson、Jackson、org.json等提供了解析功能。以Jackson为例,可以使用`ObjectMapper`类的`readValue()`方法实现: ```...

    echarts从后台数据库获取数据并加载多组曲线

    在本文中,我们将深入探讨如何使用 ECharts 从后台数据库获取数据,并加载多组曲线,以便在 Web 应用程序中展示动态、交互的数据。 首先,要实现这个功能,我们需要以下几部分: 1. **数据接口**:你需要创建一个...

    json viewer(json格式化和查看工具) v1.2 免费版.zip

    json viewer中文版支持JSON字符串查看和格式化,将功能合二为一,使用起来非常的方便,以前觉得json可读性差的朋友可以下载这个工具试一试。 软件介绍 JSON Viewer是一款方便易用的Json格式查看器。Json格式的数据...

    joson-1.rar_anomaly_海面_海面高度_海面高度异常

    在IT领域,处理这类数据通常涉及使用科学计算库,如Python的NumPy、Pandas和Matplotlib,或者MATLAB等工具。这些工具能够有效地读取、处理大量数据,并进行统计分析、可视化操作。源程序可能包含了数据预处理(如...

    php5.4以下版本json不支持不转义内容中文的解决方法

    然而,在PHP5.4以下的版本中,JSON数据格式在编码时,默认会对中文等非ASCII字符进行转义处理,即在输出的JSON字符串中,中文字符会转换为类似"\u751f\u6d3b\u7528\u54c1\u6d4b\u8bd5\u5c0f\u5c4b"这样的Unicode转义...

    JsonView工具

    - **数据验证**:在接收或发送JSON数据时,使用JsonView检查数据格式是否正确。 - **学习JSON**:初学者可以通过JsonView来理解和解析JSON数据结构。 - **数据分析**:在处理大量JSON数据时,利用JsonView的树形...

    Java中常用的关于编码解码方法

    在HTML表单中提交数据时,可以通过`&lt;form&gt;`标签的`accept-charset`属性来指定字符集。 示例代码: ```html ... ``` 如果不设置`accept-charset`属性,那么浏览器会使用默认的字符集来提交数据,这可能会导致...

    2020年新疆30mdem数据已拼接.rar

    文件中为样例数据,全部过大,不能上传,购买后私信发完整数据

    模拟json:假数据进行测试

    在软件开发过程中,尤其是前端和后端交互时,经常需要使用到JSON(JavaScript Object Notation)格式的数据。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。当我们进行功能测试、...

    全国(细化到市区县)geojson数据(echarts等图表可用)

    全国(细化到市区县)geojson数据(echarts等图表可用):{"type":"FeatureCollection","features":[{"type":"Feature","id":"130400","properties":{"name":"邯郸市","cp":[114.490686,36.612273],"childNum":1},...

    json处理配置文件

    4. **安全与错误处理**:在处理JSON文件时,要确保输入的字符串是有效的JSON格式,否则`JSON.parse()`会抛出错误。在读取和解析过程中应添加错误处理机制,防止程序因意外情况崩溃。 5. **模块化配置**:在大型项目...

    Python3 JSON编码解码方法详解

    JSON(JavaScript Object Notation)是一种轻便的数据交换格式,它基于ECMAScript的一个子集,设计为人类可读写,同时也方便机器解析和生成。...其简单的API和强大的功能,使得它在处理JSON数据时成为首选的解决方案。

    jsonschema2md:将复杂的JSON模式转换为Markdown文档

    通过提供许多脚本,该工具可以将JSON模式文件转换为可读的Markdown文档,从而使它变得更容易,这些文档可在GitHub上使用,或使用Jekyll或其他静态站点生成器进行处理。 这些工具已由Adobe引入,用于记录Adobe的体验...

    Oracle database 11g SQL 开发指南 part2

    清华大学出版社出版的《Oracle database 11g SQL开发指南》,本书是由著名的Oracle大师Joson Price著。 学习通过编写SQL语句并构建PL/SQL程序来访问Oracle数据库。完全涵盖了最新版本Oracle数据库的功能和技术,指导...

    asp.net面试考题

    使用AJAX的`XMLHttpRequest`对象发送请求,服务器返回JSON格式数据,然后在JavaScript中解析并更新DOM。 2. **C#事务操作**:在C#中,可以使用`TransactionScope`类进行数据库事务操作,确保插入数据的原子性。首先...

    Joson-humcom

    【压缩包子文件的文件名称列表】中的"Joson-humcom-main"可能表示这是项目的主要代码仓库,通常在Git版本控制系统中,"main"分支被视为默认分支,包含项目的核心代码。在解压这个文件后,我们可以预期找到如下的文件...

    千万级Mysql-MongoDB性能对比报告

    本次性能对比测试主要关注不同规模的数据插入操作在MySQL和MongoDB中的表现情况,特别是在处理千万级别数据时的表现。测试涵盖了不同的数据提交方式和数据量,旨在全面评估两种数据库系统的性能差异。 #### MySQL...

Global site tag (gtag.js) - Google Analytics