Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串转换为十六进制后字符串中的奇数十六进制长度_C# - Fatal编程技术网

C# 将字符串转换为十六进制后字符串中的奇数十六进制长度

C# 将字符串转换为十六进制后字符串中的奇数十六进制长度,c#,C#,我需要通过服务器发送消息。消息参数包括: MsgTitle和MsgBody。 我需要将消息从缓冲区转换为十六进制,但我得到错误: Newtonsoft.Json.JsonReaderException:'输入字符串 “64756D6D679207465742068657265”不是有效数字 以下是我正在使用的JSON数据: var json = @"{ Mess: [ { Msg: { MsgTitle: " + hex + @",

我需要通过服务器发送消息。消息参数包括: MsgTitleMsgBody。 我需要将消息从缓冲区转换为十六进制,但我得到错误:

Newtonsoft.Json.JsonReaderException:'输入字符串 “64756D6D679207465742068657265”不是有效数字

以下是我正在使用的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("-", "");

我也尝试了很多十六进制转换函数,我在这里找到了,但它们似乎都不工作,我不明白我做错了什么。另外,有人告诉我,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,需要构建应用程序。不幸的是,没有其他信息。但您的代码非常完美,有助于了解更多信息。我能解决它,我现在就解决了!谢谢你,乔恩!我刚刚学到了什么教训!