JSON错误,在C#字符串中\r\n

JSON错误,在C#字符串中\r\n,c#,.net,json,json.net,C#,.net,Json,Json.net,我在后端使用php,在客户端使用C。 因此,当我从服务器接收到JSON格式的多行消息时,我会这样做: dynamic answer = JsonConvert.DeserializeObject(resultHttpPost); string body = answer.body; 但我有一个错误: 新行的符号保持不变 因此,我不能使用多行消息 我试着这样做,但也没有成功 resultHttpPost = resultHttpPost.Replace("\\n", "\n").Replace(

我在后端使用php,在客户端使用C。 因此,当我从服务器接收到JSON格式的多行消息时,我会这样做:

dynamic answer = JsonConvert.DeserializeObject(resultHttpPost);
string body = answer.body;
但我有一个错误:

新行的符号保持不变

因此,我不能使用多行消息

我试着这样做,但也没有成功

resultHttpPost = resultHttpPost.Replace("\\n", "\n").Replace("\\r", "\r").Replace("\\t", "\t");
  project.Variables["var_dump"].Value = resultHttpPost;
dynamic answer = JsonConvert.DeserializeObject(resultHttpPost);
那么我该如何让它工作呢

JSON示例:

{"status":"response_ok","message":{"body":"Hi test,\r\n\r\ntesting it, lorem ipsum lorem ipsumlorem ipsumlorem ipsumlorem ipsum.\r\n\r\nSignature","id":1015,"id_thread":741},"id_thread":741} 
示例代码:

using System;
using System.Collections.Generic;
using Newtonsoft.Json;

public class Message
{
    public string body { get; set; }
    public int id { get; set; }
    public int id_thread { get; set; }
}

public class RootObject
{
    public string status { get; set; }
    public Message message { get; set; }
    public int id_thread { get; set; }
}

public class Program
{
    static public void Main()
    {
        string j = "{\"status\":\"response_ok\",\"message\":{\"body\":\"Hi test,\r\n\r\ntesting it, lorem ipsum lorem ipsumlorem ipsumlorem ipsumlorem ipsum.\r\n\r\nSignature\",\"id\":1015,\"id_thread\":741},\"id_thread\":741} ";

        RootObject ro = JsonConvert.DeserializeObject<RootObject>(j);

        Console.WriteLine(ro.message.body);
    }

}
使用系统;
使用System.Collections.Generic;
使用Newtonsoft.Json;
公共类消息
{
公共字符串体{get;set;}
公共int id{get;set;}
公共int id_线程{get;set;}
}
公共类根对象
{
公共字符串状态{get;set;}
公共消息{get;set;}
公共int id_线程{get;set;}
}
公共课程
{
静态公共void Main()
{
字符串j=“{\”状态\“:\”响应\”确定\“,\”消息\“:{\”正文\“:\”高测试,\r\n\r\n测试它,lorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsum。\r\n\r\n签名\“,”id\”:1015,\“id\u thread\”:741},\“id\u thread\”:741}”;
RootObject ro=JsonConvert.DeserializeObject(j);
控制台写入线(ro.message.body);
}
}
结果:

嗨,测试

测试它,lorem ipsum lorem ipsumlorem ipsumlorem ipsumlorem ipsum

签名

示例json是有问题的json吗?

示例代码:

using System;
using System.Collections.Generic;
using Newtonsoft.Json;

public class Message
{
    public string body { get; set; }
    public int id { get; set; }
    public int id_thread { get; set; }
}

public class RootObject
{
    public string status { get; set; }
    public Message message { get; set; }
    public int id_thread { get; set; }
}

public class Program
{
    static public void Main()
    {
        string j = "{\"status\":\"response_ok\",\"message\":{\"body\":\"Hi test,\r\n\r\ntesting it, lorem ipsum lorem ipsumlorem ipsumlorem ipsumlorem ipsum.\r\n\r\nSignature\",\"id\":1015,\"id_thread\":741},\"id_thread\":741} ";

        RootObject ro = JsonConvert.DeserializeObject<RootObject>(j);

        Console.WriteLine(ro.message.body);
    }

}
使用系统;
使用System.Collections.Generic;
使用Newtonsoft.Json;
公共类消息
{
公共字符串体{get;set;}
公共int id{get;set;}
公共int id_线程{get;set;}
}
公共类根对象
{
公共字符串状态{get;set;}
公共消息{get;set;}
公共int id_线程{get;set;}
}
公共课程
{
静态公共void Main()
{
字符串j=“{\”状态\“:\”响应\”确定\“,\”消息\“:{\”正文\“:\”高测试,\r\n\r\n测试它,lorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsum。\r\n\r\n签名\“,”id\”:1015,\“id\u thread\”:741},\“id\u thread\”:741}”;
RootObject ro=JsonConvert.DeserializeObject(j);
控制台写入线(ro.message.body);
}
}
结果:

嗨,测试

测试它,lorem ipsum lorem ipsumlorem ipsumlorem ipsumlorem ipsum

签名


例如json是有问题的json吗?

我注意到您在ASP.NET中使用了这个


这很可能是因为您实际上将其序列化了两次。在我的例子中,我调用Json.NET的serialize方法,然后从Web API控制器返回结果字符串,该字符串本身正在序列化Json字符串(ASP.NET Web API内部使用Json.NET)将JSON序列化为JSON会导致到处出现
\r\n

我注意到您在ASP.NET中使用了它


这很可能是因为您实际上将其序列化了两次。在我的例子中,我调用Json.NET的serialize方法,然后从Web API控制器返回结果字符串,该字符串本身正在序列化Json字符串(ASP.NET Web API内部使用Json.NET)将JSON序列化为JSON会导致到处出现
\r\n

显示示例
resulthtpropost
值。{“状态”:“响应”ok,“消息”:{“正文”:“嗨,测试”\r\n\r\n测试它,lorem ipsum lorem ipsum ipsum ipsum ipsum ipsum ipsum。\r\n\r\n签名”,“id”:1015,“id\u线程”:741},“id\u线程”:741}@Nelex你为什么要替换换行符?C#、Json.NET和Json本身可以很好地处理换行。您发布的代码也没有多大意义-您在哪里找到
\\r
?您是否对调试器的换行符表示法感到困惑?您是否尝试过反序列化原始字符串?顺便说一句,这是一个编译错误,与JSON无关。张贴生成错误的实际行。在任何情况下,错误都表示字符串文字(即手动在代码中键入的字符串)包含无效的转义字符,并使编译器认为剩余的行是字符串的一部分。Visual Studio的语法着色最有可能将行的其余部分显示为字符串。它看起来像是环境问题,因为在Visual Studio中,它可以很好地显示示例
resulthtpropost
value.{“status”:“response_ok”,“message”:{“body”:“Hi test,\r\n\r\n测试它,lorem ipsum lorem ipsumlorem ipsumlorem ipsumlorem ipsumlorem ipsum。\r\n\r\n签名”,“id”:1015,“id\u线程”:741},“id\u线程”:741}”@Nelex你为什么要尝试替换换行符?C#、Json.NET和Json本身可以很好地处理换行符。你发布的代码也没有多大意义-你在哪里找到了
\\r
?你可能对调试器的换行符表示法感到困惑吗?你尝试过反序列化原始字符串吗?顺便说一句,这是一个编译错误,它与JSON无关。发布生成错误的实际行。在任何情况下,错误都表示您的字符串文字(即手动在代码中键入的字符串)包含无效的转义字符,并使编译器认为剩余的行是字符串的一部分。Visual Studio的语法着色很可能将该行的其余部分显示为字符串。它看起来像是环境问题,因为在Visual Studio中它工作得很好。换句话说,您无法重现该问题?@PanagiotisKanavos yes,此字符串应无问题反序列化。很可能OP混淆了实际字符的转义换行符,并试图替换其中没有的内容。换句话说,您无法重现此问题?@PanagiotisKanavos是的,此字符串应无问题反序列化。很可能OP混淆了实际字符的转义换行符我100%确定它只序列化了一次,我只是再次检查。不,我100%确定它只序列化了一次,我只是再次检查。