【问题标题】:Json.NET serializeObject putting newline characters into dataJson.NET serializeObject 将换行符放入数据
【发布时间】:2015-10-18 22:55:16
【问题描述】:

我在服务器上运行了一个 ASP.NET Web API REST 服务,该服务向我的 Android 应用程序来回提供数据。我使用了很多 Newtonsoft Json 并取得了巨大的成功,但这给我正在编写的新方法带来了问题。

简而言之,我正在从我的 SQL Server DB 中读取一个大字符串,将其放入一个简单的对象中,将其序列化为 Json 字符串,然后发布一个 HTTP POST 响应。发生的事情是 serializeObject 每 76 个字符插入一次换行符 (/n) 到字符串中。

以下代码...

    Logger.log("retPair.publicKey =  " + retPair.publicKey);
    returnString = JsonConvert.SerializeObject(retPair);
    Logger.log("Verify Talker return is " + returnString);

产生以下两个日志条目。 . .

10/18/2015 3:19:36 PMDBAWP7 retPair.publicKey = MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzQn5Lw2PTlVkSOjg7ycZMVDUmaGYQhVe I82XcheaPDyr16tCp4P2oJCjKlKPeN1v5qN4kR4BKo3xjUwM+BWO6i3mr10C9/mbXUoInVXVODRu lkdIXFPthSkBMytl5jAjaf1Ep4F3Y64WVwYXd9ASYpfNN5FMvxUzYbdkV7QNObsfHkAnr98uamFg SJ0dGJ8svQ1DKiKz4db+zkzalXNHqh7mbV7kxRkT08GlocFEOp/xaLISlrH03CcKozerTbY/NkMx XE7s7+wAuREgjKdNkpjRYUTMdm/QhxcvJf8UU7tE89POHkZ1wghPpAFIJ6kdCVBewrfaJVdcwJk8 WdzzaQIDQAB

10/18/2015 3:19:36 PMDBAWP7 验证 Talker 返回是 { “phoneKey”: “cathyblakely”, “公钥”: “MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzQn5Lw2PTlVkSOjg7ycZMVDUmaGYQhVe \ nI82XcheaPDyr16tCp4P2oJCjKlKPeN1v5qN4kR4BKo3xjUwM + BWO6i3mr10C9 / mbXUoInVXVODRu \ nlkdIXFPthSkBMytl5jAjaf1Ep4F3Y64WVwYXd9ASYpfNN5FMvxUzYbdkV7QNObsfHkAnr98uamFg \ nSJ0dGJ8svQ1DKiKz4db + zkzalXNHqh7mbV7kxRkT08GlocFEOp / xaLISlrH03CcKozerTbY / NkMx \ nXE7s7 + wAuREgjKdNkpjRYUTMdm / QhxcvJf8UU7tE89POHkZ1wghPpAFIJ6kdCVBewrfaJVdcwJk8 \ nWdzzaQIDAQAB \ n” 个} P>

顺便说一句,数据是公共加密密钥。

如您所见,第二个日志条目每 76 个字符就有 /n。在网上研究这个问题我看到其他人已经得到了这个问题,但没有人收到解决问题的回复。格式化。NONE 无效。

我的 Newtonsoft.Json.dll 的产品版本是 4.5.6.14930。任何人都知道为什么会发生这种情况。我知道我可以消除字符串中的 \n ,但这是我最后的手段。 谢谢, 院长

【问题讨论】:

  • 只是为了确认一下,retPair.publicKeystring 而不是 byte[],对吗?

标签: c# asp.net .net json json.net


【解决方案1】:

正如www.json.org 的 JSON 规范中所见,字符串中的换行符在 JSON 中编码为 \n

JSON.Net 不是在输出中任意引入换行符,而是您的原始字符串 已经 具有换行符,因此必须对其进行编码。

【讨论】:

  • 如您所见,retPair.publicKey 中没有换行符,所以我的原始字符串还没有换行符。它们显然是由 serializeObject 操作放在那里的。没有?
  • 很难清楚地看到,但所有\n 字符完全与您粘贴到问题中的公钥中的换行符对齐。要么它一开始就在那里,要么它是一个复制/粘贴工件,只是巧合地对齐。
  • 试试JsonConvert.SerializeObject(retPair.Replace("\n","")),看看你是否得到不同的结果。那你就肯定知道了。
  • @MattJohnson 我想你的意思是retPair.publicKey.Replace("\n","")
  • @DeanBlakely 我同意马特的观点。您的代码中很可能调用了Convert.ToBase64(publicKeyBytes, Base64FormattingOptions.InsertLineBreaks);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 2015-09-24
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 1970-01-01
相关资源
最近更新 更多