C# 将字符串转换为十六进制后字符串中的奇数十六进制长度
我需要通过服务器发送消息。消息参数包括: MsgTitle和MsgBody。 我需要将消息从缓冲区转换为十六进制,但我得到错误: Newtonsoft.Json.JsonReaderException:'输入字符串 “64756D6D679207465742068657265”不是有效数字 以下是我正在使用的JSON数据:C# 将字符串转换为十六进制后字符串中的奇数十六进制长度,c#,C#,我需要通过服务器发送消息。消息参数包括: MsgTitle和MsgBody。 我需要将消息从缓冲区转换为十六进制,但我得到错误: Newtonsoft.Json.JsonReaderException:'输入字符串 “64756D6D679207465742068657265”不是有效数字 以下是我正在使用的JSON数据: var json = @"{ Mess: [ { Msg: { MsgTitle: " + hex + @",
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("-", "");
我也尝试了很多十六进制转换函数,我在这里找到了,但它们似乎都不工作,我不明白我做错了什么。另外,有人告诉我,URL中只允许使用字符。问题是JSON包含如下属性:
MsgTitle: 64756D6D7920746578742068657265,
MsgBody: 64756D6D7920746578742068657265
MsgTitle: "64756D6D7920746578742068657265",
MsgBody: "64756D6D7920746578742068657265"
这就是你表示数字的方式。对于字符串,需要引号,如下所示:
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,并且更容易获得正确的代码。请您通过调试器显示上述JSON的外观。意味着用变量名替换实际值
hex
?通过观察JohnSkeets答案,您应该使用类对象来准备json,这样这些错误在将来就不会再发生了!我已经按照你的建议做了:'MsgTitle':'“+hex+@','MsgBody':'“+hex+@'”,但是如果我这样做,那么什么都不会发生。获取无效消息的异常。@CarlosFlorian:除了“获取无效消息的异常”之外,没有更多的信息,我们真的帮不了你。但至少这是有效的JSON。这可能是您的服务器所期望的,也可能不是-我们没有关于这方面的任何信息。不过,我还是强烈建议您不要像这样自己构造JSON。它真的很脆。我想我可以让它工作!我只有来自API的JSON,需要构建应用程序。不幸的是,没有其他信息。但您的代码非常完美,有助于了解更多信息。我能解决它,我现在就解决了!谢谢你,乔恩!我刚刚学到了什么教训!