【发布时间】:2017-10-18 20:07:20
【问题描述】:
在发布此问题之前,我花了几个小时在论坛上搜索此问题的答案,所以如果有人问过这个问题,请见谅。
我需要通过 Jason RPC 发送一个 2 字节的参数,但我遇到了一些困难。
我使用 VB.NET (VS 2013) 作为我的开发平台。我创建了一个发送函数,它是我的问题的根源。这是一个sn-p:
**Public Function daliSend(url As String, universe_id As Integer, bytes As Byte(), expect_answer As Boolean, send_twice As Boolean) As Result
Dim rpcObject As New JObject() From { _
{"Id", generateRandomString()}, _
{"Jsonrpc", "2.0"}, _
{"method", "dali.send"}, _
{"params", New JObject() From { _
{"universe_id", universe_id}, _
{"bytes", bytes}, _
{"expect_answer", expect_answer}, _
{"send_twice", send_twice} _
}} _
}
Dim json As String = JsonConvert.SerializeObject(rpcObject ).ToLower()**
我正在为我的 RPC 请求发送“字节”作为字节数组 [187,0](即字节(0)= 187,字节(1)= 0)。但是,Jtoken 会立即通过 base 64 编码将字节数组转换为字符串。
使用 TextVisualizer,我看到 rpcObject =
{ “Id”:“倒数”, “Jsonrpc”:“2.0”, “方法”:“dali.send”, “参数”:{ “universe_id”:4, “字节”:“uwA=”, “expect_answer”:是的, “发送两次”:假 } }
根据 Json.Net 序列化指南中的定义,原始类型 Byte[] 转换为字符串(base 64 编码)。本质上,以下 .NET 转换正在发生 Convert.ToBase64String(bytes),它产生字符串“uwA=”。
我可以忍受。但是,这需要在序列化为字符串之前进行更改。关于如何在序列化之前修改上述对象(rpcObject)的任何想法?我需要做的是可能使用 Convert.FromBase64String() 将字符串参数 "bytes" 值 "uwA=" 转换回 "[187,0]",因此数组与字符串相比是序列化的。
我还没有找到一种简单的方法来在序列化之前隔离该参数。
【问题讨论】: