我需要通过服务器发送消息。消息参数为: MsgTitle 和 MsgBody 。 我需要将消息从缓冲区转换为十六进制,但出现错误:
Newtonsoft.Json.JsonReaderException:'输入字符串 '64756D6D7920746578742068657265'不是有效的数字。
这是我正在使用的JSON数据:
var json = @"{
Mess: [
{
Msg: {
MsgTitle: " + hex + @",
MsgBody: " + hex + @"
}
}
]
}";
我为解决该问题而实施的代码:
string msg = "dummy text here";
byte[] utfBytes = System.Text.Encoding.UTF8.GetBytes(msg);
string hex = BitConverter.ToString(utfBytes).Replace("-", "");
我还尝试了很多在这里找到的HEX转换器函数,但是似乎它们都没有起作用,而且我不明白我在做什么错。另外,有人告诉我,URL中只允许使用字符。
答案 0 :(得分:7)
问题是您的JSON包含以下属性:
MsgTitle: 64756D6D7920746578742068657265,
MsgBody: 64756D6D7920746578742068657265
这就是您表示数字的方式。对于字符串,您需要使用引号,例如:
MsgTitle: "64756D6D7920746578742068657265",
MsgBody: "64756D6D7920746578742068657265"
此外,属性的名称也应该用引号引起来:
"MsgTitle": "64756D6D7920746578742068657265",
"MsgBody": "64756D6D7920746578742068657265"
避免此类问题的最简单方法是首先不要将JSON直接构造为字符串。而是使用JSON API,例如Json.NET。这是使用匿名类型执行此操作的示例代码,尽管还有其他多种方法:
using System;
using System.Text;
using Newtonsoft.Json;
public class Program
{
public static void Main()
{
string msg = "dummy text here";
byte[] utfBytes = System.Text.Encoding.UTF8.GetBytes(msg);
string hex = BitConverter.ToString(utfBytes).Replace("-", "");
var obj = new
{
Mess = new[]
{
new
{
Msg = new
{
MsgTitle = hex,
MsgBody = hex
}
}
}
};
string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
Console.WriteLine(json);
}
}
输出:
{
"Mess": [
{
"Msg": {
"MsgTitle": "64756D6D7920746578742068657265",
"MsgBody": "64756D6D7920746578742068657265"
}
}
]
}
现在是有效的JSON-更容易编写正确的代码。