我今天来是因为我被困住了,这对我来说似乎不合逻辑。
我有我的服务器 ( Go ) 和我的智能手机应用程序 ( Xamarin C# )。
对于 Xamarin 方面,我正在使用这个包 -> Sockets Plugin for Xamarin and Windows (PCL)
对于 Go 方面,我使用的是encoding/json
Xamarin 部分中的所有内容都运行良好。但在 Go 方面,它没有......我正在使用以下代码来处理来自每个net.Conn的消息。
type DialMessageContainer struct {
Type string `json:"Type"`
Content json.RawMessage `json:"Content"`
}
func (dialTCP *DialTCP) serve_conn(conn net.Conn) {
fmt.Println("Handle new connection.")
dec := json.NewDecoder(conn)
var message m.DialMessageContainer
//Use one of the following
printContent(conn)
// --
err := dec.Decode(&message)
fmt.Println(message, err)
//End
conn.Close()
}
func printContent(conn net.Conn) {
var buf bytes.Buffer
io.Copy(&buf, conn)
fmt.Println(buf.String())
}
所以,类型在这里是为了让它知道它是哪种类型的json。然后,从这个类型字符串中,它将 json.RawmMessage 内容中的 json 解组到好对象。我知道它有效,但是当我尝试从以下 json 重新创建我的对象时,我收到此错误:
(printContent 没有注释,那么 Decode 就没什么可看的了,它是用于调试跟踪测试的)
....
Handle new connection.
{
"Type": "Authentication",
"Content": {
"UUID": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1heGltZS1ndWl0dGV0QG91dGxvb2suY29tIiwiZXhwIjoxNDYyNjM4MTkzfQ.DEGJcDYl9Iq4nayo37Rq9ZsK8mrU-V8gU5I8JLO8oLg"
}
}
{ []} EOF
所以,当我隐藏 printContent(conn)时, dec.Decode 给出了这个:
....
Handle new connection.
{ []} invalid character '\x00' looking for beginning of object key string
我问自己的是:“\x00 是否意味着 ascii 表的 NULL CHAR?”。如果这个错误是因为这个字符而出现的,那么它在哪里呢?此外,如果是这个 char,也许它只是用来标记字符串的结束点(在 C 中使用 '\0' 来标记 char*/char[] 的结束)。
但是,也许我完全错了..老实说,我被卡住了,我不明白.. Aynway,JSONLint说这是一个有效的 JSON,所以它只能是我认为的阅读内容
如果有人可以帮忙,谢谢!
繁花如伊
交互式爱情
相关分类